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


85

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

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

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

['element1', 'element2', 'element3']

Ответы:


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])

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.