Как разбить элементы списка?

85

У меня есть список:

my_list = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']

Как я могу удалить \tи все после, чтобы получить этот результат:

['element1', 'element2', 'element3']
user808545
источник

Ответы:

113

Что-то вроде:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']
Роман Боднарчук
источник
Я почти понимаю это. Что такое 1 внутри аргумента разделения действий? То же самое для того, что я предполагаю, это индекс 0 после скобок. Создает ли это новый список с использованием нулевого элемента того, что было i? Тогда является ли 1 просто еще одним разделением, эффективно избавляющимся от остальной части строки, как того хотел OP?
Малик А. Руми
2
Поскольку список содержит строки, переменная i является строкой. Итак, i.split ('\ t', 1) вызывает метод строк split (). Согласно документации , первый параметр этого метода - это строка для разделения, а второй - максимальное количество выполняемых разделений. Метод возвращает список строк, полученных в результате выполнения разбиения, поэтому «[0]» возвращает первую строку разбиения в списке результатов.
jcl
2
Когда я попробовал это для своего собственного кода, он вернул ошибку, что у объекта «список» нет атрибута «split». Я не понимаю, как это обойти.
keitereth24
1
@ keitereth24, Роман разделил список строк. У вас может быть список из списка
AAI
9

Попробуйте выполнить итерацию по каждому элементу списка, затем разделите его по символу табуляции и добавьте в новый список.

for i in list:
    newList.append(i.split('\t')[0])
Caltangelo
источник
5
Это работает, но понимание списков - гораздо лучший способ сделать это
Дэйв
6

Не используйте список в качестве имени переменной. Вы также можете взглянуть на следующий код:

clist = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847', 'element5']
clist = [x[:x.index('\t')] if '\t' in x else x for x in clist]

Или редактирование на месте:

for i,x in enumerate(clist):
    if '\t' in x:
        clist[i] = x[:x.index('\t')]
Артем Рудзенко
источник
2

Мне пришлось разделить список для извлечения функций на две части lt, lc:

ltexts = ((df4.ix[0:,[3,7]]).values).tolist()
random.shuffle(ltexts)

featsets = [(act_features((lt)),lc) 
              for lc, lt in ltexts]

def act_features(atext):
  features = {}
  for word in nltk.word_tokenize(atext):
     features['cont({})'.format(word.lower())]=True
  return features
Макс Кляйнер
источник