Лишить все элементы строкового списка


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

['thisn', 'isn', 'an', 'listn', 'ofn', 'wordsn']

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

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

5 ответов:

>>> 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']

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

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

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)

Это может быть сделано с помощью списка понимания, как определено в PEP 202

[w.strip() for w in  ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']]

все остальные ответы, и в основном о понимании списка, велики. Но просто чтобы объяснить свою ошибку:

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добавляет материал для вашего списка. В вашем случае не полезно создавать список со значениями defaut, так как вы будете создайте его элемент за элемент при добавлении разделенных строк.

поэтому ваш код должен быть таким:

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

но, конечно, лучший из них-это один, так как это точно то же самое:

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

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