有没有一种简单的方法可以用列表理解来简化可重复列表,或者如果做不到这一点,你们都会认为什么样的方法才是平衡性能和可读性这样的浅表的最佳方法呢?
我试图用嵌套的列表理解来平平这样的列表,如下所示:
[image for image in menuitem for menuitem in list_of_menuitems]但我遇到了麻烦的NameError品种,因为name 'menuitem' is not defined。在搜索并查看Stack溢出之后,我使用reduce语句获得了所需的结果:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))但是这个方法很难读,因为我需要在那里调用list(x),因为x是Django QuerySet对象。
结论:
感谢每一个为这个问题做出贡献的人。这是我学到的东西的总结。我还把它变成了一个社区wiki,以防其他人想要添加或纠正这些观察。
我最初的减少语句是多余的,最好这样写:
>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))这是嵌套列表理解的正确语法(精彩摘要dF!):
>>> [image for mi in list_of_menuitems for image in mi]但是,这些方法都没有使用itertools.chain更有效。
>>> from itertools import chain
>>> list(chain(*list_of_menuitems))正如@cdleary所指出的,通过使用chain.from_iterable来避免*操作符魔术可能更好一些,如下所示:
>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, 3, 5, 89, 6]https://stackoverflow.com/questions/406121
复制相似问题