Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何循环/创建列表或元组中的列表-特殊的唯一输出?_Python_List_Loops_Tuples_Iteration - Fatal编程技术网

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