我想对某些列表进行排列。如果我使用itertools.product
函数执行笛卡尔积,那么输出对我来说真的很奇怪
如果我对下面两个包含字符串的列表进行排列:
list1= ('In1', 'In2')
list2= ('Ta1', 'Ta2')
list3= []
list3Append= []
for list3 in itertools.product(list1, list2, repeat=1):
list3Append.append(list3)
print('list3Append:\n', list3Append)
输出正常
list3Append:[('In1', 'Ta1'), ('In1', 'Ta2'), ('In2', 'Ta1'), ('In2', 'Ta2')]
还有两个包含数字的列表:
list4= ([[1,2,3], [4,5,6]])
list5= ([[7, 8, 9], [10,11,12]])
list6= []
list6Append= []
for list6 in itertools.product(list4, list5, repeat=1):
list6Append.append(list6)
print('list6Append:\n', list6Append)
输出也没问题
list6Append:[([1, 2, 3], [7, 8, 9]), ([1, 2, 3], [10, 11, 12]), ([4, 5, 6], [7, 8, 9]), ([4, 5, 6], [10, 11, 12])]
但如果我想为list3Append
和list6Append
list7= []
for list7 in itertools.product(list3Append, list6Append, repeat=1):
print('list7:\n', list7)
然后我得到:
list7: (('In1', 'Ta1'), ([1, 2, 3], [7, 8, 9]))
list7: (('In1', 'Ta1'), ([1, 2, 3], [10, 11, 12]))
list7: (('In1', 'Ta1'), ([4, 5, 6], [7, 8, 9]))
list7: (('In1', 'Ta1'), ([4, 5, 6], [10, 11, 12]))
list7: (('In1', 'Ta2'), ([1, 2, 3], [7, 8, 9]))
list7: (('In1', 'Ta2'), ([1, 2, 3], [10, 11, 12]))
list7: (('In1', 'Ta2'), ([4, 5, 6], [7, 8, 9]))
list7: (('In1', 'Ta2'), ([4, 5, 6], [10, 11, 12]))
list7: (('In2', 'Ta1'), ([1, 2, 3], [7, 8, 9]))
list7: (('In2', 'Ta1'), ([1, 2, 3], [10, 11, 12]))
list7: (('In2', 'Ta1'), ([4, 5, 6], [7, 8, 9]))
list7: (('In2', 'Ta1'), ([4, 5, 6], [10, 11, 12]))
list7: (('In2', 'Ta2'), ([1, 2, 3], [7, 8, 9]))
list7: (('In2', 'Ta2'), ([1, 2, 3], [10, 11, 12]))
list7: (('In2', 'Ta2'), ([4, 5, 6], [7, 8, 9]))
list7: (('In2', 'Ta2'), ([4, 5, 6], [10, 11, 12]))
正确的输出应该是:
list7: (('In1', 'Ta1'), ([1, 2, 3], [7, 8, 9]))
list7: (('In1', 'Ta2'), ([1, 2, 3], [10, 11, 12]))
list7: (('In2', 'Ta1'), ([4, 5, 6], [7, 8, 9]))
list7: (('In2', 'Ta2'), ([4, 5, 6], [10, 11, 12]))
我在这里做错了什么? 谢谢
答案 0 :(得分:2)
考虑到前两种情况中product
的行为,你不应该对它在第三种情况下的行为感到惊讶。您实际上想zip
列出3和6:
>>> list7 = list(zip(list3Append, list6Append))
[(('In1', 'Ta1'), ([1, 2, 3], [7, 8, 9])),
(('In1', 'Ta2'), ([1, 2, 3], [10, 11, 12])),
(('In2', 'Ta1'), ([4, 5, 6], [7, 8, 9])),
(('In2', 'Ta2'), ([4, 5, 6], [10, 11, 12]))]
此外,不需要事先声明循环变量:
list1, list2 = ('In1', 'In2'), ('Ta1', 'Ta2')
list3Append = []
for list3 in itertools.product(list1, list2, repeat=1):
list3Append.append(list3)
# Or simply:
list3Append = list(itertools.product(list1, list2))