如何进行for循环并更改列表中的条目?比如,等同于[line.strip() for line in lines]
,但line.strip()
被保存回行列表。
这是必需的,因为我使用的是存储在列表中的大型数据集。该数据集将用于机器训练以训练分类器。具体来说,使用NLTK lib进行自然语言处理。因此,重复数组是不可行的。
答案 0 :(得分:1)
使用生成器表达式,然后不会同时保留所有行。
glines = (line.strip() for line in lines)
答案 1 :(得分:1)
是否要将结果存储到同一个实例lines
中(不能替换为新的列表实例)?
lines[:] = [line.strip() for line in lines]
答案 2 :(得分:1)
如果我理解正确,您正试图从文件中删除行,而不是创建一个全新的列表。问题是在Python strings are immutable中,所以你不能修改字符串,你必须创建一个新字符串。
正如其他人所建议的那样,生成器表达式将根据需要生成剥离的字符串,而不是将它们全部存储在新列表中,从而减少内存需求。如果确实想要删除字符串,那么这样的事情就可以完成:
for i, line in enumerate(lines): lines[i] = line.strip()
但是,无论如何,创建新列表可能会更快。
答案 3 :(得分:0)
这个怎么样:
lines = [line.strip() for line in lines]
创建另一个列表(尽管它全部存储在内存中,这可能是很多行的问题)。
或者,您可以使用generator expression来避免潜在的内存问题,只需按需创建行:
lines = (line.strip() for line in lines)