我有 3 个列表:
['1','2']
['a','b','c']
['X','Y']
我希望得到的结果:
['1aX','1bX','1cX','2aX','2bX','2cX','1aY','1bY','1cY','2aY','2bY','2cY']
有没有办法快速设置?
我有 3 个列表:
['1','2']
['a','b','c']
['X','Y']
我希望得到的结果:
['1aX','1bX','1cX','2aX','2bX','2cX','1aY','1bY','1cY','2aY','2bY','2cY']
有没有办法快速设置?
您可以使用itertools.product()
:
map("".join, itertools.product(list1, list2, list3))
>>> x,y,z=['1','2'],['a','b','c'],['x','y']
>>> s=[a+b+c for c in z for a in x for b in y]
>>> s
['1ax', '1bx', '1cx', '2ax', '2bx', '2cx', '1ay', '1by', '1cy', '2ay', '2by', '2cy']
这样你就可以选择你想要的顺序
要获得您指定的确切结果,您可以使用以下命令:
import operator
import itertools
list1 = ['1','2']
list2 = ['a','b','c']
list3 = ['X','Y']
getter = operator.itemgetter(1, 2, 0)
result = [''.join(getter(seq)) for seq in itertools.product(list3, list1, list2)]
的最后一个参数itertools.product()
将是第一个更改的,因此根据您的示例输出,我们希望list2
成为最后一个,然后是list1
,然后是list3
,因为首先中间元素前进,然后是第一个元素,然后是最后一个。该operator.itemgetter()
调用用于对元素进行重新排序,以便元素 fromlist1
首先出现,等等。
我发现列表推导在这里更容易阅读,但这里有一个单行替代方案,它使用map()
:
map(''.join, map(operator.itemgetter(1, 2, 0), itertools.product(list3, list1, list2)))
(您也可以在一行中进行列表理解,但您不应该这样做,因为这样operator.itemgetter()
调用将在每次迭代中执行)