My goal

我的问题是关于列表理解,它不会将元素按原样放入结果列表中(这将导致嵌套列表),但会将结果extends放入平面列表中.所以我的问题是not about flattening a nested list,但如何得到一个扁平的列表,而avoiding to make a nested list首先是.

Example

考虑一个Have类实例,它的属性包含一系列整数:

class Foo:
    def __init__(self, l):
        self.l = l

foo_0 = Foo([1, 2, 3])
foo_1 = Foo([4, 5])
list_of_foos = [foo_0, foo_1]

现在我想要一个列表,列出Foo的所有实例中的所有整数.我使用extend的最佳解决方案是:

result = []
for f in list_of_foos:
    result.extend(f.l)

不出所料,result现在是[1, 2, 3, 4, 5].

Is there something better? For example list comprehensions?

因为我预计列表理解会更快,所以我在寻找一种用列表理解来获得期望结果的方法.我最好的方法是获得一个列表列表(‘嵌套列表’),然后再次扁平化这个列表--这似乎很奇怪:

result = [item for sublist in [f.l for f in list_of_foos] for item in sublist]

What functionaly I'm looking for

result = some_module.list_extends(f.l for f in list_of_foos)

Questions and Answers I read before

我很确定这个问题是有答案的,但在我的搜索过程中,我只找到了list.extend and list comprehension个出现嵌套列表的原因不同的地方;以及python list comprehensions; compressing a list of lists?个关于避免嵌套列表或如何将其扁平化的答案.

推荐答案

您可以在一个理解中使用多个for:

result = [
    n
    for foo in list_of_foos
    for n in foo.l
]

注意,for的顺序是从外到内--就像您编写了一个嵌套的for循环一样:

for foo in list_of_foos:
    for n in foo.l:
        print(n)

Python相关问答推荐

为什么判断pd.DataFrame的值与判断pd.Series的值存在差异(如果索引中有值)?

计算每月过go x年的平均值

单击cookie按钮,但结果不一致

是否有方法将现有的X-Y图转换为X-Y-Y1图(以重新填充)?

Python如何让代码在一个程序中工作而不在其他程序中工作

如何使用Selenium访问svg对象内部的元素

过载功能是否包含Support Int而不是Support Int?

基本链合同的地址是如何计算的?

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

如何过滤包含2个指定子字符串的收件箱列名?

通过pandas向每个非空单元格添加子字符串

OR—Tools CP SAT条件约束

在np数组上实现无重叠的二维滑动窗口

Scrapy和Great Expectations(great_expectations)—不合作

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

需要帮助重新调整python fill_between与数据点

启动带有参数的Python NTFS会导致文件路径混乱

使用BeautifulSoup抓取所有链接

网格基于1.Y轴与2.x轴显示在matplotlib中

如何找出Pandas 图中的连续空值(NaN)?