从字符串列表的元素中删除尾部换行符

我必须在表格中列出一大串单词:

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

然后使用带状函数,将其转换为:

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

我以为我写的东西会有用,但我总是错误地说:

“‘ list’对象没有属性‘ Strip’”

下面是我试过的代码:

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())
244559 次浏览

你可以用列表内涵

my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
stripped = [s.strip() for s in my_list]

或者使用 map():

stripped = list(map(str.strip, my_list))

在 Python2中,map()直接返回一个列表,因此不需要调用 list。在 Python 3中,列表内涵更加简洁,通常被认为更加地道。

列表内涵 [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 附录的东西到您的列表。在您的例子中,创建一个带有默认值的列表是没有用的,因为您将在附加剥离字符串时为每个项目构建列表。

所以你的代码应该是这样的:

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

但是,可以肯定的是,最好的一个是这个,因为这是完全一样的东西:

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

如果您有比 .strip更复杂的函数,将其放入函数中,然后执行相同的操作。这是处理列表最易读的方法。

如果您只需要删除 跟踪空格,您可以使用 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']
my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
print([l.strip() for l in my_list])

产出:

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