Як розділити елементи списку?


84

У мене є список:

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

Як я можу видалити \tі все після, щоб отримати такий результат:

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

Відповіді:


110

Щось на зразок:

>>> 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
Коли я спробував це для власного коду, він повернув помилку, що об'єкт 'list' не має атрибута '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.