2011-07-14 30 views
46

Wiem, że to dość podstawowe pytanie, ale jestem nowy dla Pythona i nie mogę wymyślić, jak go rozwiązać.Podział elementów listy w pythonie

Mam listę:

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

i chcę usunąć '\ t' i wszystko po. Zastanawiałem się, jak podzielić każdy element na "\ t", aby móc skasować każdy inny element listy. Jednak gdy próbuję wykonać list[0:].split('\t'), otrzymuję AttributeError: obiekt 'list' nie ma atrybutu "split". Próbowałem także stworzyć całą listę jako ciąg znaków, ale przyniosło to cały szereg mnóstwa problemów. Wszelkie sugestie będą mile widziane.

+6

Wyjaśnienie dlaczego Twój kod nie działa (nie lubią tylko odpowiedzi kod do beginners): 'list [0:]' zwraca listę, więc nie możesz użyć 'split', funkcji z' str', na niej. Musisz przejść przez każdy element i podzielić go osobno, za pomocą wyrażenia for lub [list understand] (http://docs.python.org/tutorial/datastructures.html#list-comprehensions) – Jacob

+0

dzięki za wyjaśnienie. bardzo doceniane. – user808545

+0

dzisiaj dowiedziałem się, zawsze jest łatwiejszy sposób robienia tego, co chcę w pythonie – espais

Odpowiedz

52

Coś jak:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847'] 
>>> [i.split('\t', 1)[0] for i in l] 
['element1', 'element2', 'element3'] 
+0

Prawie to rozumiem. Co jest 1 w argumentacji dzielenia się? To samo, co zakładam jako indeks 0 po parens. Czy to tworzy nową listę przy użyciu elementu zeroeth tego, co było i? Czy jest to kolejny podział, skutecznie pozbawiając resztę łańcucha, jak chciał OP? –

+0

Ponieważ lista zawiera ciągi, zmienną i jest ciąg znaków. Zatem i.split ('\ t', 1) wywołuje metodę split() łańcuchów. Zgodnie z [dokumentacją] (https://docs.python.org/2/library/stdtypes.html#str.split) pierwszym parametrem tej metody jest ciąg znaków dzielony przez, a drugi - maksymalna liczba podziałów. występować. Metoda zwraca listę ciągów, które wynikają z podziału, więc "[0]" zwraca pierwszy łańcuch podziału na liście wyników. – jcl

+1

Kiedy próbowałem tego dla mojego własnego kodu, zwrócił błąd, że obiekt 'list' nie ma atrybutu "split". Nie wiem, jak sobie z tym poradzić. – keitereth24

25
myList = [i.split('\t')[0] for i in myList] 
3

Spróbuj iteracja każdego elementu listy, a następnie dzieląc go na znak tabulacji i dodanie go do nowej listy.

for i in list: 
    newList.append(i.split('\t')[0]) 
+4

To działa, ale rozumienie list jest o wiele lepszym sposobem na zrobienie tego. – dave

+0

Nie znałem tej metody, dzięki za napiwek. – caltangelo

4

Nie należy używać listy jako nazwy zmiennej. Można przyjrzeć się następującym kodem zbyt:

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] 

Albo w miejscu edycji:

for i,x in enumerate(clist): 
    if '\t' in x: 
     clist[i] = x[:x.index('\t')] 
-3
sentences = ("The cat ate a big mouse. This was becasue the mouse was annoying him") 

import re 

liste = re.findall(r"[\w']+|[.,!?;]", sentences) 

nodu = [] 
for x in liste: 
if x not in nodu: 
    nodu.append(x) 
print(nodu) 

pos = [] 
for word in liste: 
if word in nodu: 
    pos.append(nodu.index(word)+1) 
print(pos) 

lpos = [] 
for word in liste: 
lpos.append(liste.index(word)+1) 

nodus = (str(nodu)) 
file=open("t3.txt","w") 
file.write(nodus) 
file.write("\n") 
file.write(str(pos)) 
file.close() 



for number in lpos: 
for word in liste: 
    number = word 
    print(number) 
break 
Powiązane problemy