我想做一些列表的排列。如果我用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]))
我做错什么了? 谢谢
考虑到前两种情况下
product
的行为,您不应该对第三种情况下的行为感到惊讶。实际上,您需要zip
列出3和6:此外,无需事先声明循环变量:
相关问题 更多 >
编程相关推荐