Удалить завершающий символ новой строки из элементов списка строк - PullRequest
104 голосов
/ 02 ноября 2011

Мне нужно взять большой список слов в виде:

['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']

и затем, используя функцию полосы, преобразовать его в:

['this', 'is', 'a', 'list', 'of', 'words']

Я думал, что то, что яЯ написал, что будет работать, но я получаю сообщение об ошибке:

"У объекта" список "нет атрибута" Газа ""

Вот код, который я пробовал:

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

Ответы [ 6 ]

176 голосов
/ 02 ноября 2011
>>> my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
>>> map(str.strip, my_list)
['this', 'is', 'a', 'list', 'of', 'words']
98 голосов
/ 02 ноября 2011

список понимания?[x.strip() for x in lst]

50 голосов
/ 02 ноября 2011

Вы можете использовать списки :

strip_list = [item.strip() for item in lines]

Или map:

# with a lambda
strip_list = map(lambda it: it.strip(), lines)

# without a lambda
strip_list = map(str.strip, lines)
8 голосов
/ 02 ноября 2011

Это можно сделать, используя списочные выражения, как определено в PEP 202

[w.strip() for w in  ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']]
2 голосов
/ 02 ноября 2011

Все остальные ответы, и в основном о понимании списка, великолепны.Но просто для объяснения вашей ошибки:

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

a является членом вашего списка, а не индекса.Вот что вы можете написать:

[...]
for a in lines:
    strip_list.append(a.strip())

Еще один важный комментарий: вы можете создать пустой список следующим образом:

strip_list = [0] * 20

Но это не так полезно, как .append добавляет материал в ваш список.В вашем случае не полезно создавать список со значениями по умолчанию, так как вы будете создавать его для каждого элемента при добавлении разделенных строк.

Таким образом, ваш код должен выглядеть так:

strip_list = []
for a in lines:
    strip_list.append(a.strip())

Но, безусловно, лучшим из них является этот, так как это одно и то же:

stripped = [line.strip() for line in lines]

Если у вас есть что-то более сложное, чем просто .strip, поместите это в функцию,и сделай то же самое.Это самый читаемый способ работы со списками.

1 голос
/ 14 октября 2018

Если вам нужно удалить только конечный пробел, вы можете использовать str.rstrip(), что должно быть немного более эффективно, чем str.strip():

>>> lst = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
>>> [x.rstrip() for x in lst]
['this', 'is', 'a', 'list', 'of', 'words']
>>> list(map(str.rstrip, lst))
['this', 'is', 'a', 'list', 'of', 'words']
...