Jak podzielić elementy listy?

85

Mam listę:

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

Jak mogę usunąć \ti wszystko później, aby uzyskać ten wynik:

['element1', 'element2', 'element3']
user808545
źródło

Odpowiedzi:

113

Coś jak:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']
Roman Bodnarchuk
źródło
Prawie to rozumiem. Co robi 1 w argumencie do podziału? To samo, co zakładam, to indeks 0 po parach. Czy to jest tworzenie nowej listy przy użyciu elementu zeroeth tego, co było i? Czy zatem 1 jest tylko kolejnym splitem, skutecznie pozbywającym się reszty łańcucha tak, jak chciał OP?
Malik A. Rumi
2
Ponieważ lista zawiera ciągi, zmienna i jest łańcuchem. Więc i.split ('\ t', 1) wywołuje metodę split () łańcuchów. Zgodnie z dokumentacją , pierwszym parametrem tej metody jest ciąg do podziału, a drugim jest maksymalna liczba podziałów do wykonania. Metoda zwraca listę ciągów będących wynikiem wykonania podziału, więc „[0]” zwraca pierwszy łańcuch podziału na liście wyników.
jcl
2
Kiedy próbowałem tego dla mojego własnego kodu, zwróciłem błąd, że obiekt „lista” nie ma atrybutu „podział”. Nie wiem, jak to obejść.
keitereth24
1
@ keitereth24, rzymska lista podzielonych ciągów. Możesz mieć listę
AAI
37
myList = [i.split('\t')[0] for i in myList] 
dave
źródło
9

Spróbuj przejść przez każdy element listy, a następnie podziel go na znak tabulacji i dodaj do nowej listy.

for i in list:
    newList.append(i.split('\t')[0])
caltangelo
źródło
5
To działa, ale listy ze składaniem są o wiele lepszym sposobem na zrobienie tego
dave,
6

Nie używaj listy jako nazwy zmiennej. Możesz również spojrzeć na poniższy kod:

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]

Lub edycja lokalna:

for i,x in enumerate(clist):
    if '\t' in x:
        clist[i] = x[:x.index('\t')]
Artsiom Rudzenka
źródło
2

Musiałem podzielić listę do wyodrębnienia cech na dwie części 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
Max Kleiner
źródło