python - 两个循环的 Python 列表理解
问题描述
我是 Python 的初学者。
我学习列表推导,但我的代码很糟糕,因为列表推导错误或缺失:
我尝试了很多东西,但结果是生成器或错误。你能给我建议吗...?
谢谢你。宏碁
import itertools as it
aT=list(it.permutations([4,3,3,0],3))
uT=list(set(aT))
# convert uniqueTimes list of tuples to list of lists
uT=[list(el) for el in uT]
uTt=[el[0]+el[1]+el[2] for el in uT] #It is wrong, I want universal list comprehension :-( when I change members of permutation, e.g.it.permutations([5,4,3,2,1],4))
uTs=[] #It is wrong too, I want universal list comprehension :-(
a=""
for m in range(len(uT)):
for n in range(len(uT[m])):
a+=str(uT[m][n])
uTs.append(a)
a=""
uTcombine=list(it.zip_longest(uTs,uTt)) #result as I expected, but the algorithm is "non comperhesion"
print(uT)
print(uTcombine)
从此(uT - 列表列表,其中每个内部列表都是唯一的)
[[0, 3, 3], [3, 4, 3], [0, 3, 4], [3, 0, 3], [3, 4, 0], [3, 0, 4], [ 4, 0, 3], [4, 3, 3], [3, 3, 4], [3, 3, 0], [0, 4, 3], [4, 3, 0]]
我需要那个(uTcombine - 元组列表,其中第一个元组是 [0,3,3] => '033',第二个是列表项的总和 [0,3,3] => 6
[('033', 6), ('343', 10), ('034', 7), ('303', 6), ('340', 7), ('304', 7), ( '403', 7), ('433', 10), ('334', 10), ('330', 6), ('043', 7), ('430', 7)]
解决方案
您可以使用标准库中的现有函数,而不是尽可能编写自己的函数:
uT = [(''.join(map(str, el)), sum(el)) for el in uT]
在这种情况下:
''.join(map(str, el))
将排列转换为您想要的字符串表示形式(0, 3, 3, )
->'033'
首先将每个项目转换为字符串(使用map(str, el)
),然后加入字符串。
sum(el)
总结了排列(0, 3, 3, )
->6
推荐阅读
- sql - 如何从最后一个父级的行中获取数据
- c - 如何在 switch 语句中评估案例 (C)
- backend - 实时 API 托管建议和架构设计建议
- node.js - npm 错误!errno fetch_error 角度
- tensorflow - AutoML Vision Edge 中使用什么算法?
- hibernate - 查询参数与 quarkus 上的结果不一致
- python - 如何使用 M1 在 MacOS 上安装 SciPy
- scala - Akka committableOffset 存储在数据库中
- python - 用 astropy 和 fit_wcs_from_points 拟合天顶等面积投影
- arrays - bash - 使用带有 find 命令的数组