Python 链接列表有什么好处吗?

Python 链接列表有什么好处吗?,python,itertools,Python,Itertools,据我模糊的理解,itertools.chain.from_iterable用于组合两个或多个返回iterables的内容,即使用yield关键字的内容,当使用这些内容时,它们会节省内存 我有我要破译的密码。是别人写的 all_rows = [] with open(__file__, 'rt') as reader: for row in reader: all_rows.append(row) magic = list(itertools.chain.from_iter

据我模糊的理解,itertools.chain.from_iterable用于组合两个或多个返回iterables的内容,即使用yield关键字的内容,当使用这些内容时,它们会节省内存

我有我要破译的密码。是别人写的

all_rows = []
with open(__file__, 'rt') as reader:
    for row in reader:
        all_rows.append(row)
magic = list(itertools.chain.from_iterable(all_rows))
for line in magic:
    print(line)

直接使用所有行不是更好吗?因为它已经是内存中的数据结构了。

您没有链接一个列表。您正在链接该列表的内容:

>>> import itertools
>>> all_rows = ['lorem ipsum', 'and so on']
>>> list(itertools.chain.from_iterable(all_rows))
['l', 'o', 'r', 'e', 'm', ' ', 'i', 'p', 's', 'u', 'm', 'a', 'n', 'd', ' ', 's', 'o', ' ', 'o', 'n']
如果您的代码只是简单地使用chainall\u行而不是chain.from\u iterableall\u行,那么您就有了一个观点;那你绝对是对的。将已经是列表的单个iterable链接起来,然后再次将该链接转换为列表,这是没有意义的

但是,它会将iterable的内容链接在一起。然后它取决于列表中的元素


例如,链接多个字符串的优点是不必首先构建更大的列表。否则您必须使用list.joinall_行。

Shoot,我的示例肯定有一个bug。无论如何,实际的代码将文件读入字符串列表,然后在for-in循环中遍历行之前调用listitertools.chain.from_iterableall_行。@MatthewMartin:听起来很浪费,为什么在循环中迭代时要构建列表?如果你不需要随机访问,那么不要在上面调用列表,只需迭代。@ MatthWaldMal:同样,如果实际代码在文件中读入字符串列表,考虑使用生成这些内容的生成器,而不必将所有内容保存在内存中。谢谢,这证实了我的怀疑。值得一提的是,其他一些开发人员写了这篇文章&似乎已经用这个来自iterable的文章包装了很多已经存在于内存中的列表