-2

如何进行 for 循环并更改列表中的条目?就像 , 的等价物[line.strip() for line in lines],除了line.strip()保存回行列表。

这是必需的,因为我使用的是存储在列表中的大型数据集。该数据集将用于机器训练以训练分类器。具体来说,使用 NLTK 库的自然语言处理。因此,阵列的复制是不可行的。

4

4 回答 4

1

这个怎么样:

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

它创建了另一个列表(尽管它都存储在内存中,这可能是很多行的问题)。

或者,您可以使用生成器表达式来避免潜在的内存问题,并按需创建行:

lines = (line.strip() for line in lines)
于 2012-06-01T02:11:31.263 回答
1

使用生成器表达式,则不会同时保留所有行。

glines = (line.strip() for line in lines)
于 2012-06-01T02:13:06.143 回答
1

您是否要将结果存储到同一个实例中lines(而不是替换为新的列表实例)?

lines[:] = [line.strip() for line in lines]
于 2012-06-01T02:16:27.730 回答
1

如果我理解正确,您是在尝试从文件删除行,而不是创建一个全新的列表。问题是在 Python 中字符串是不可变的,所以你不能就地修改一个字符串,你必须创建一个新的。

正如其他人所建议的那样,生成器表达式将按需生成剥离的字符串,而不是将它们全部存储在新列表中,从而减少内存需求。如果您真的想将字符串剥离到位,那么这样的事情就可以完成:

for i, line in enumerate(lines): lines[i] = line.strip()

但无论如何,创建一个新列表可能会更快。

于 2012-06-01T02:19:22.523 回答