Muszę wziąć dużą listę słów w postaci:
['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
a następnie używając funkcji strip, zamień ją na:
['this', 'is', 'a', 'list', 'of', 'words']
Myślałem, że to, co napisałem, zadziała, ale ciągle pojawia się błąd:
Obiekt „lista” nie ma atrybutu „pasek” ”
Oto kod, który wypróbowałem:
strip_list = []
for lengths in range(1,20):
strip_list.append(0) #longest word in the text file is 20 characters long
for a in lines:
strip_list.append(lines[a].strip())
strip_list
19 razy, a następnie dołączasz pozbawione linie. Ten kod ma bardzo nieprzyjemny zapach. Również jeśli masz te rzeczy z pliku, powinieneś je rozbierać po drodze - budowanie dużej listy, a następnie wbijanie jej w inną dużą listę nie jest dobrym pomysłem. Również 2, twój kod nie powinien zależeć od znajomości długości najdłuższego słowa / linii. Cofnij się trochę - co próbujesz osiągnąć? Co zrobiszstrip_list
?Odpowiedzi:
źródło
str.strip
działa to tylko wtedy, gdy masz pewność, że lista nie zawiera ciągów znaków Unicode. Jeśli może zawierać zarówno łańcuchy 8-bitowe, jak i Unicode, użyj tego,lambda s: s.strip()
jak wspomniano powyżej, lub użyjstrip
funkcji, którą możesz zaimportować zstrings
modułu.list
to zrobićlist(map(str.strip, my_list))
. Sprawdź też: link .rozumienie listy?
[x.strip() for x in lst]
źródło
Możesz używać list składanych :
Lub
map
funkcja:źródło
0
wartościami na początku listy. Chociaż nie mogę sobie wyobrazić, co próbujesz osiągnąć, umieszczając je na tej samej liście wyników ...strip_list = list(map(str.strip, lines))
tak, jak map () zwraca iterator mapy. docs.python.org/3/library/functions.html#mapMożna to zrobić za pomocą list składanych zgodnie z definicją w PEP 202
źródło
list
namap
:)Wszystkie inne odpowiedzi, a głównie dotyczące rozumienia listy, są świetne. Ale żeby wyjaśnić twój błąd:
a
jest członkiem Twojej listy, a nie indeksem. Możesz napisać tak:Kolejny ważny komentarz: pustą listę możesz stworzyć w ten sposób:
Ale to nie jest tak przydatne, ponieważ
.append
dodaje rzeczy do listy. W twoim przypadku nie jest użyteczne tworzenie listy z domyślnymi wartościami, ponieważ będziesz budować ją jako element dla każdego elementu podczas dołączania usuniętych ciągów.Twój kod powinien wyglądać następująco:
Ale na pewno najlepszy jest ten, ponieważ to dokładnie to samo:
Jeśli masz coś bardziej skomplikowanego niż zwykłe a
.strip
, umieść to w funkcji i zrób to samo. To najbardziej czytelny sposób pracy z listami.źródło
Jeśli chcesz usunąć tylko końcowe spacje, możesz użyć
str.rstrip()
, co powinno być nieco bardziej wydajne niżstr.strip()
:źródło
Wynik:
źródło