python-3.x - 使用列表理解展平元组列表
问题描述
为什么下面的列表理解会出错?我错过了什么?
a = [
[(1, 2), (11, 22), (111, 222)],
[(3, 4), (33, 44), (333, 444)],
[(5, 6), (55, 66), (555, 666)]
]
b = [k for k in j for j in i for i in a]
print(sorted(b))
我知道有更优雅/可读的解决方案,但这是为了我自己的理解。
错误: TypeError:“int”对象不可迭代
所需输出: [1、2、3、4、5、6、11、22、33、44、55、66、111、222、333、444、555、666]
解决方案
列表理解中的顺序是错误的。这是正确的解决方案:
In [5]: a = [
...: [(1, 2), (11, 22), (111, 222)],
...: [(3, 4), (33, 44), (333, 444)],
...: [(5, 6), (55, 66), (555, 666)]
...: ]
...:
...: b = [j for x in a for y in x for j in y]
...:
...:
...:
In [6]:
In [6]: b
Out[6]: [1, 2, 11, 22, 111, 222, 3, 4, 33, 44, 333, 444, 5, 6, 55, 66, 555, 666]
In [7]: sorted(b)
Out[7]: [1, 2, 3, 4, 5, 6, 11, 22, 33, 44, 55, 66, 111, 222, 333, 444, 555, 666]
这是一个解释嵌套列表理解的 SO 讨论:解释嵌套列表理解的工作原理?
推荐阅读
- php - 每次提交表单时返回不同的文本 PHP
- javascript - 带有 vuedraggable 的 Vue typescript 类组件
- ssl - 通过 Let's Encrypt 在 digitalocean droplet 为我的域获取 SSL 证书时出现问题
- awk - 批量更新文本文件中的一行
- android - 未能通过 # 作为拨号应用程序中的输入
- c# - Swagger UI 输出“不支持的媒体类型”
- xamarin - MVVM Xamarin Forms,最适合在等待来自服务调用的几分钟响应时将函数保留在内存中
- amazon-web-services - 在foreach循环中执行powershell命令
- java - Spring ExceptionalHandler 的 Java 测试
- typescript - 在默认导出和命名导出中导出一个值(循环)