Python:如何循环/创建列表或元组中的列表-特殊的唯一输出?
我需要帮助 这是我的列表和元组。我不知道哪一个是更好的解决方案,所以我都打印在这里 我在这里仅使用列表显示我的问题Python:如何循环/创建列表或元组中的列表-特殊的唯一输出?,python,list,loops,tuples,iteration,Python,List,Loops,Tuples,Iteration,我需要帮助 这是我的列表和元组。我不知道哪一个是更好的解决方案,所以我都打印在这里 我在这里仅使用列表显示我的问题 x11 = ["1", "x", "t", "f", "T"] x12 = ["C", "D", "6"] x13 = ["5", "9", "J", "D"] x14 = ["e", "a", "o", "x", "f", "z"] x15 = ["1", "x", "7", "f", "T"] x16 = ["D", "O", "0", "B", "8", "Q", "q"]
x11 = ["1", "x", "t", "f", "T"]
x12 = ["C", "D", "6"]
x13 = ["5", "9", "J", "D"]
x14 = ["e", "a", "o", "x", "f", "z"]
x15 = ["1", "x", "7", "f", "T"]
x16 = ["D", "O", "0", "B", "8", "Q", "q"]
x17 = ["c", "a"]
x18 = ["9", "J", "7", "f", "I"]
x19 = ["C", "O", "D", "0", "6"]
x20 = ["P", "F", "C"]
xlist1 = [x11,x12,x13,x14,x15,x16,x17,x18,x19,x20]
t11 = ("1", "x", "t", "f", "T")
t12 = ("C", "D", "6")
t13 = ("5", "9", "J", "D")
t14 = ("e", "a", "o", "x", "f", "z")
t15 = ("1", "x", "7", "f", "T")
t16 = ("D", "O", "0", "B", "8", "Q", "q")
t17 = ("c", "a")
t18 = ("9", "J", "7", "f", "I")
t19 = ("C", "O", "D", "0", "6")
t20 = ("P", "F", "C")
tuple1 = (t11,t12,t13,t14,t15,t16,t17,t18,t19,t20)
我希望对xlist1/tuple1进行迭代/循环,以获得一个特殊格式的新列表/tuple。
目标输出列表/-tuple应该是唯一的
output = (["1C5e1Dc9CP"],["xC5e1Dc9CP"],["tC5e1Dc9CP"],["FC5e1Dc9CP"],["TC5e1Dc9CP"],
["1D5e1Dc9CP"],["165e1Dc9CP"],
["1C9e1Dc9CP"],["1CJe1Dc9CP"],["1CDe1Dc9CP"],
["1C5a1Dc9CP"],["1C5o1Dc9CP"],["1C5x1Dc9CP"],["1C5f1Dc9CP"],["1C5z1Dc9CP"],
...
["T6DzTqaI6C"])
迭代所有标记:
'1D5e1Dc9CP' '1D5e1Dc9CP' '1D9e1Dc9CP' '1DJe1Dc9CP' '1DDe1Dc9CP' '1D5a1Dc9CP' '1D5o1Dc9CP' '1D5x1Dc9CP' '1D5f1Dc9CP' '1D5z1Dc9CP' '1D5exDc9CP' '1D5e7Dc9CP' '1D5efDc9CP' '1D5eTDc9CP' '1D5e1Oc9CP' '1D5e10c9CP' '1D5e1Bc9CP' '1D5e18c9CP' '1D5e1Qc9CP' '1D5e1qc9CP' '1D5e1Da9CP' '1D5e1DcJCP' '1D5e1Dc7CP' '1D5e1DcfCP' '1D5e1DcICP' '1D5e1Dc9OP' '1D5e1Dc9DP' '1D5e1Dc90P' '1D5e1Dc96P' '1D5e1Dc9CF' '1D5e1Dc9CC'
'xD5exDc9CP' 'x65exDc9CP' 'xC9exDc9CP' 'xCJe1Dc9CP' 'xCDe1Dc9CP' 'xC5a1Dc9CP' 'xC5o1Dc9CP' 'xC5x1Dc9CP' 'xC5f1Dc9CP' 'xC5z1Dc9CP' 'xC5exDc9CP' 'xC5e7Dc9CP' 'xC5efDc9CP' 'xC5eTDc9CP' 'xC5e1Oc9CP' 'xC5e10c9CP' 'xC5e1Bc9CP' 'xC5e18c9CP' 'xC5e1Qc9CP' 'xC5e1Qc9CP' 'xC5e1Da9CP' 'xC5e1DcJCP' 'xC5e1Dc7CP' 'xC5e1DcfCP' 'xC5e1DcICP' 'xC5e1Dc9OP' 'xC5e1Dc9DP' 'xC5e1Dc90P' 'xC5e1Dc96P' 'xC5e1Dc9CF' 'xC5e1Dc9CC'
'TC5e1Dc9CP' 'TCJe1Dc9CP' 'TCDe1Dc9CP' 'TC5a1Dc9CP' 'TC5o1Dc9CP' 'TC5x1Dc9CP' 'TC5f1Dc9CP' 'TC5z1Dc9CP' 'TC5exDc9CP' 'TC5e7Dc9CP' 'TC5efDc9CP' 'TC5eTDc9CP' 'TC5e1Oc9CP' 'TC5e10c9CP' 'TC5e1Bc9CP' 'TC5e18c9CP' 'TC5e1Qc9CP' 'TC5e1qc9CP' 'TC5e1Da9CP' 'TC5e1DcJCP' 'TC5e1Dc7CP' 'TC5e1DcfCP' 'TC5e1DcICP' 'TC5e1Dc9OP' 'TC5e1Dc9DP' 'TC5e1Dc90P' 'TC5e1Dc96P' 'TC5e1Dc9CF' 'TC5e1Dc9CC'
'TD5e1Dc9CP' 'TDJe1Dc9CP' 'TDDe1Dc9CP' 'TD5a1Dc9CP' 'TD5o1Dc9CP' 'TD5x1Dc9CP' 'TD5f1Dc9CP' 'TD5z1Dc9CP' 'TD5exDc9CP' 'TD5e7Dc9CP' 'TD5efDc9CP' 'TD5eTDc9CP' 'TD5e1Oc9CP' 'TD5e10c9CP' 'TD5e1Bc9CP' 'TD5e18c9CP' 'TD5e1Qc9CP' 'TD5e1qc9CP' 'TD5e1Da9CP' 'TD5e1DcJCP' 'TD5e1Dc7CP' 'TD5e1DcfCP' 'TD5e1DcICP' 'TD5e1Dc9OP' 'TD5e1Dc9DP' 'TD5e1Dc90P' 'TD5e1Dc96P' 'TD5e1Dc9CF' 'TD5e1Dc9CC'
'T65e1Dc9CP' 'T6Je1Dc9CP' 'T6De1Dc9CP' 'T65a1Dc9CP' 'T65o1Dc9CP' 'T65x1Dc9CP' 'T65f1Dc9CP' 'T65z1Dc9CP' 'T65exDc9CP' 'T65e7Dc9CP' 'T65efDc9CP' 'T65eT6c9CP' 'T65e1Oc9CP' 'T65e10c9CP' 'T65e1Bc9CP' 'T65e18c9CP' 'T65e1Qc9CP' 'T65e1qc9CP' 'T65e1Da9CP' 'T65e1DcJCP' 'T65e1Dc7CP' 'T65e1DcfCP' 'T65e1DcICP' 'T65e1Dc9OP' 'T65e1Dc9DP' 'T65e1Dc90P' 'T65e1Dc96P' 'T65e1Dc9CF' 'T65e1Dc9CC'
在这里,我展示了迭代算法和inidicies:
output = ([x11[0]+x12[0]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5e1Dc9CP
[x11[1]+x12[0]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# xC5e1Dc9CP
[x11[2]+x12[0]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# tC5e1Dc9CP
[x11[3]+x12[0]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# FC5e1Dc9CP
[x11[4]+x12[0]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# TC5e1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1D5e1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 165e1Dc9CP
[x11[0]+x12[0]+x13[1]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C9e1Dc9CP
[x11[0]+x12[0]+x13[2]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1CJe1Dc9CP
[x11[0]+x12[0]+x13[3]+x14[0]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1CDe1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[1]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5a1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[2]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5o1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[3]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5x1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[4]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5f1Dc9CP
[x11[0]+x12[1]+x13[0]+x14[5]+x15[0]+x16[0]+x17[0]+x18[0]+x19[0]+x20[0]],
# 1C5z1Dc9CP
...
[x11[4]+x12[2]+x13[3]+x14[5]+x15[4]+x16[6]+x17[1]+x18[5]+x19[4]+x20[2]])
# T6DzTqaI6C
因此,重要的是输出元组/列表是唯一的,并且具有所有相同的长度==10个字符,(len(xlist1)
)和方向
从x11。。x20
我试过这样想,但解决不了
combs = functools.reduce(lambda x, y: list(itertools.combinations(xlist1, y)) + x, range(len(xlist1)+1), [])
for c in combs:
print ("Combination:", c)
或
有人有建议、想法或解决方案吗 要获取列表的完整产品,您需要:
list(itertools.product(*tuple1))
根据您的输入,将有160万个元素:
['1C5e1Dc9CP', '1C5e1Dc9CF', '1C5e1Dc9CC', '1C5e1Dc9OP', '1C5e1Dc9OF',
'1C5e1Dc9OC', '1C5e1Dc9DP', '1C5e1Dc9DF', '1C5e1Dc9DC', '1C5e1Dc90P' ...]
要对此进行分块,请编写一个分块函数:
def chunker(gen, size):
while True:
lst = []
for _ in range(size):
lst.append(next(gen))
yield lst
product_generator = itertools.product(*tuple1)
chunks = chunker(product_generator, 50000)
然后你通过
chunk = next(chunks)
下面是上一个答案,它不会生成列表的完整产品:
这将生成一个列表,并正确地处理任意列表的副本,其中您希望在整个基础上迭代单个元素
full = []
for piece_index in range(len(tuple1)):
for inner_index in range(0 if piece_index == 0 else 1, len(tuple1[piece_index])):
line = ""
for index in range(len(tuple1)):
line += tuple1[index][inner_index if piece_index == index else 0]
full.append(line)
这是通过逐个列表、逐个元素并围绕该元素构建字符串来实现的。它还跳过每个列表中除第一个之外的第一个元素,因为这只是第一个元素的副本
piece\u index
跟踪我们当前正在处理的子列表李>
internal_index
跟踪我们当前正在构建字符串的子列表中的哪个元素
index
是该字符串中围绕我们当前使用的tuple1[piece\u index][inner\u index]
构建的字符
结果:
['1C5e1Dc9CP', 'xC5e1Dc9CP', 'tC5e1Dc9CP', 'fC5e1Dc9CP', 'TC5e1Dc9CP',
'1D5e1Dc9CP', '165e1Dc9CP',
'1C9e1Dc9CP', '1CJe1Dc9CP', '1CDe1Dc9CP',
'1C5a1Dc9CP', '1C5o1Dc9CP', '1C5x1Dc9CP', '1C5f1Dc9CP', '1C5z1Dc9CP',
'1C5exDc9CP', '1C5e7Dc9CP', '1C5efDc9CP', '1C5eTDc9CP',
'1C5e1Oc9CP', '1C5e10c9CP', '1C5e1Bc9CP', '1C5e18c9CP', '1C5e1Qc9CP', '1C5e1qc9CP',
'1C5e1Da9CP',
'1C5e1DcJCP', '1C5e1Dc7CP', '1C5e1DcfCP', '1C5e1DcICP', '1C5e1DcJCP',
'1C5e1Dc9OP', '1C5e1Dc9DP', '1C5e1Dc90P', '1C5e1Dc96P',
'1C5e1Dc9CF', '1C5e1Dc9CC']
如果希望将它们作为1个元素列表的元组,full.append([line])
并在循环后添加一个full=tuple(full)
,将进行更改
值得注意的是,确实包含重复项('1C5e1DcJCP'
),因为源代码列表包含重复项:t18=(“9”、“J”、“7”、“f”、“I”、“J”)
输出中的最后一项不应该以t
开头吗?为了确保输出是唯一的,可以使用一组。确保不要像上面的格式那样包含嵌套在列表中的字符串,因为列表是不可修改的,所以不能将它们添加到集合中。我认为使用set(“1C5e1Dc9CP”、“xC5e1Dc9CP”…)而不是([“1C5e1Dc9CP”]、[“xC5e1Dc9CP”…])会起作用。只要每个子列表没有重复项,从它们中提取的组合就不应该重复。x18
和t18
有重复的J
。它需要处理重复项吗?您的“带索引的迭代”显式生成相同的字符串两次,并且需要解释顺序。干得好。但我想对所有标记进行迭代。@Kris这正好生成您的预期输出。如果这不是你想要的,请用修改后的信息编辑你的问题。我不明白你说的对所有索引进行迭代是什么意思。是的,它进行了输出,但没有。。。[“T6DzTqaI6C”])及其之间的所有其他组合。对不起,我不能解释得这么糟。但必须有更多的组合。我就我的问题发布了更多的输出。我会尽量解释得更准确些。谢谢您的建议。@Kris是与输出顺序相关的,还是只需要所述的所有组合?full=[[x11、x12、x13、x14、x15、x16、x17、x18、x19、x20],[x11、x12、x13、x14、x15、x16、x17、x18、x19、x20],]
['1C5e1Dc9CP', 'xC5e1Dc9CP', 'tC5e1Dc9CP', 'fC5e1Dc9CP', 'TC5e1Dc9CP',
'1D5e1Dc9CP', '165e1Dc9CP',
'1C9e1Dc9CP', '1CJe1Dc9CP', '1CDe1Dc9CP',
'1C5a1Dc9CP', '1C5o1Dc9CP', '1C5x1Dc9CP', '1C5f1Dc9CP', '1C5z1Dc9CP',
'1C5exDc9CP', '1C5e7Dc9CP', '1C5efDc9CP', '1C5eTDc9CP',
'1C5e1Oc9CP', '1C5e10c9CP', '1C5e1Bc9CP', '1C5e18c9CP', '1C5e1Qc9CP', '1C5e1qc9CP',
'1C5e1Da9CP',
'1C5e1DcJCP', '1C5e1Dc7CP', '1C5e1DcfCP', '1C5e1DcICP', '1C5e1DcJCP',
'1C5e1Dc9OP', '1C5e1Dc9DP', '1C5e1Dc90P', '1C5e1Dc96P',
'1C5e1Dc9CF', '1C5e1Dc9CC']