如何在Python中生成列表的所有排列,与该列表中的元素类型无关?
例如:
permutations([])
[]
permutations([1])
[1]
permutations([1, 2])
[1, 2]
[2, 1]
permutations([1, 2, 3])
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud) 如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 假设我有一个列表,我想生成所有唯一元素对的列表,而不考虑订单.一种方法是:
mylist = ['W','X','Y','Z']
for i in xrange(len(mylist)):
for j in xrange(i+1,len(mylist)):
print mylist[i],mylist[j]
W X
W Y
W Z
X Y
X Z
Y Z
Run Code Online (Sandbox Code Playgroud)
我想用迭代器做这个,我想到了以下内容,即使它没有简洁:
import copy
it1 = iter(mylist)
for a in it1:
it2 = copy.copy(it1)
for b in it2:
print a,b
Run Code Online (Sandbox Code Playgroud)
但这甚至都行不通.什么是更加pythonic和有效的方式,使用迭代器或zip等?