相关疑难解决方法(0)

如何从列表列表中制作一个平面列表?

我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.

我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.

l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)

错误信息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud)

python list flatten multidimensional-array

2950
推荐指数
29
解决办法
184万
查看次数

在Python中展平浅层列表

是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?

我尝试使用嵌套列表理解来压缩这样的列表,如下所示:

[image for image in menuitem for menuitem in list_of_menuitems]
Run Code Online (Sandbox Code Playgroud)

但我在NameError那里遇到麻烦,因为name 'menuitem' is not defined.谷歌搜索并浏览Stack Overflow后,我得到了一个reduce声明所需的结果:

reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

但是这个方法相当难以理解,因为我需要那个list(x)调用,因为x是一个Django QuerySet对象.

结论:

感谢所有为此问题做出贡献的人.以下是我学到的内容摘要.我也将其作为社区维基,以防其他人想要添加或更正这些观察结果.

我原来的reduce语句是多余的,用这种方式编写得更好:

>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

这是嵌套列表理解的正确语法(Brilliant summary dF!):

>>> [image for mi in list_of_menuitems for image in mi]
Run Code Online (Sandbox Code Playgroud)

但这些方法都不如使用效率高itertools.chain:

>>> from itertools import chain
>>> list(chain(*list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

正如@cdleary指出的那样,通过使用chain.from_iterable如下所示来避免*操作符魔术可能是更好的风格:

>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

382
推荐指数
10
解决办法
17万
查看次数

理解扁平序列序列?

如果我有序列序列(可能是元组列表),我可以使用itertools.chain()来展平它.但有时我觉得我宁愿把它写成一种理解.我只是想不出怎么做.这是一个非常具体的案例:

假设我想在序列中交换每对元素.我在这里使用字符串作为序列:

>>> from itertools import chain
>>> seq = '012345'
>>> swapped_pairs = zip(seq[1::2], seq[::2])
>>> swapped_pairs
[('1', '0'), ('3', '2'), ('5', '4')]
>>> "".join(chain(*swapped_pairs))
'103254'
Run Code Online (Sandbox Code Playgroud)

我在序列的偶数和奇数切片上使用zip来交换对.但我最终得到了一个现在需要扁平化的元组列表.所以我使用chain().有没有办法可以用理解来表达它?

如果你想发布你自己的解决方案来解决交换对的元素的基本问题,请继续,我会投票给任何教我新东西的东西.但是,即使答案是"不,你做不到",我也只会接受一个针对我的问题的答案.

python sequences list-comprehension

36
推荐指数
2
解决办法
2万
查看次数

取消嵌套嵌套列表

嗨,我想知道如何取消嵌套嵌套嵌套列表.我有:

list = [[[1,2,3]], [[4,5,6]], [[7,8,9]]]
Run Code Online (Sandbox Code Playgroud)

我想看看如下:

new_list = [[1,2,3], [4,5,6], [7,8,9]]
Run Code Online (Sandbox Code Playgroud)

怎么做?

python

1
推荐指数
1
解决办法
925
查看次数