Лишить все элементы строкового списка
Я должен взять большой список слов в виде:
['thisn', 'isn', 'an', 'listn', 'ofn', 'wordsn']
а затем с помощью функции полосы, превратить его в:
['this', 'is', 'a', 'list', 'of', 'words']
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']
можно использовать генераторы списков:
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
, поместите это в функцию и сделайте то же самое. Это самый читаемый способ работы со списками.