理解列表理解,以便在python中展平列表列表

理解列表理解,以便在python中展平列表列表,第1张

概述我发现这种理解非常适用于展平列列表: >>> list_of_lists = [(1,2,3),(2,3,4),(3,4,5)]>>> [item for sublist in list_of_lists for item in sublist][1, 2, 3, 2, 3, 4, 3, 4, 5] 我比使用itertools.chain()更喜欢这个,但我无法理解它.我用括号尝试了周围的部 我发现这种理解非常适用于展平列表列表:
>>> List_of_Lists = [(1,2,3),(2,3,4),(3,4,5)]>>> [item for subList in List_of_Lists for item in subList][1,5]@H_404_3@  

我比使用itertools.chain()更喜欢这个,但我无法理解它.我用括号尝试了周围的部分,看看我是否可以降低复杂性,但现在我只是更加困惑:

>>> [(item for subList in List_of_Lists) for item in subList][<generator object <genexpr> at 0x7ff919fdfd20>,<generator object <genexpr> at 0x7ff919fdfd70>,<generator object <genexpr> at 0x7ff919fdfdc0>]>>> [item for subList in (List_of_Lists for item in subList)][5,5,5]@H_404_3@  

我觉得我很难理解,因为我不太明白发电机是如何工作的……我的意思是,我以为我做了,但现在我真的很怀疑.就像我说的,我喜欢这个成语是多么紧凑,这正是我需要的,但我不愿意使用我不理解的代码.

谁能解释一下究竟发生了什么?

@H_403_12@解决方法 从左到右阅读for循环,就好像它们是嵌套的一样.左边的表达式是在最终列表中生成每个值的表达式:
for subList in List_of_Lists:    for item in subList:        item  # added to the List@H_404_3@  

如果测试过滤使用的元素,列表推导也支持;这些也可以看作是嵌套语句,与for循环相同.

通过添加括号,您更改了表达式;括号中的所有内容现在都是要添加的左侧表达式:

for item in subList:    (item for subList in List_of_Lists)  # added to the List@H_404_3@  

像这样的for循环是生成器表达式.它的工作方式与列表理解完全相同,只是它不构建列表.这些元素是按需生产的.您可以向生成器表达式询问下一个值,然后是下一个值,等等.

在这种情况下,必须有一个预先存在的子列表对象,以便它可以工作;毕竟,外部循环不再是List_of_Lists了.

您的最后一次尝试转换为:

for subList in (List_of_Lists for item in subList):    item  # aded to the List@H_404_3@  

这里List_of_Lists是生成器表达式中的循环元素,循环遍历子列表中的项目.同样,子列表必须已经存在才能使其工作.然后循环将预先存在的项添加到最终列表输出中.

在您的情况下,显然子列表是一个包含3个项目的列表;你的最终名单产生了3个元素. item绑定为5,所以你的输出中有5次5.

@H_403_12@ @H_403_12@ 总结

以上是内存溢出为你收集整理的理解列表理解,以便在python中展平列表列表全部内容,希望文章能够帮你解决理解列表理解,以便在python中展平列表列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存