具有两个周期的Python列表理解

时间:2019-04-07 15:38:12

标签: python python-3.x tuples list-comprehension

我是Python的初学者。

我学习了列表理解,但是我的代码很糟糕,因为列表理解是错误的或缺失的:

我尝试了很多事情,但是结果是生成器或错误。你能给我建议...吗?

谢谢。 宏cer

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)]]

1 个答案:

答案 0 :(得分:0)

您可以使用标准库中的现有函数,而不必在可能的情况下编写自己的函数:

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