我試圖顯示數字列表的所有可能的排列的所有排列,例如,如果我有334我想:Python中得到的數字
3 3 4
3 4 3
4 3 3
我需要能夠做到這一點對於長達約12位數字的任何一組數字。
我敢肯定,它可能相當簡單,使用itertools.combinations類似的東西,但我不能完全得到正確的語法。
TIA 山姆
我試圖顯示數字列表的所有可能的排列的所有排列,例如,如果我有334我想:Python中得到的數字
3 3 4
3 4 3
4 3 3
我需要能夠做到這一點對於長達約12位數字的任何一組數字。
我敢肯定,它可能相當簡單,使用itertools.combinations類似的東西,但我不能完全得到正確的語法。
TIA 山姆
>>> lst = [3, 3, 4]
>>> import itertools
>>> set(itertools.permutations(lst))
{(3, 4, 3), (3, 3, 4), (4, 3, 3)}
你想要排列,而不是組合。請參閱:How to generate all permutations of a list in Python
>>> from itertools import permutations
>>> [a for a in permutations([3,3,4])]
[(3, 3, 4), (3, 4, 3), (3, 3, 4), (3, 4, 3), (4, 3, 3), (4, 3, 3)]
注意,它的置換兩個3的(在數學上做正確的事),但不一樣的你的榜樣。如果列表中有重複的號碼,這隻會有所作爲。
沒有itertools
def permute(LIST):
length=len(LIST)
if length <= 1:
yield LIST
else:
for n in range(0,length):
for end in permute(LIST[:n] + LIST[n+1:]):
yield [ LIST[n] ] + end
for x in permute(["3","3","4"]):
print x
輸出
$ ./python.py
['3', '3', '4']
['3', '4', '3']
['3', '3', '4']
['3', '4', '3']
['4', '3', '3']
['4', '3', '3']
我會使用Python的itertools
,但如果你有這自己實現,這裏有一個返回指定大小的所有排列碼獲取值的列表。
示例:values = [1,2,3]
,size = 2
=>[[3, 2], [2, 3], [2, 1], [3, 1], [1, 3], [1, 2]]
def permutate(values, size):
return map(lambda p: [values[i] for i in p], permutate_positions(len(values), size))
def permutate_positions(n, size):
if (n==1):
return [[n]]
unique = []
for p in map(lambda perm: perm[:size], [ p[:i-1] + [n-1] + p[i-1:] for p in permutate_positions(n-1, size) for i in range(1, n+1) ]):
if p not in unique:
unique.append(p)
return unique
這是一個很酷的答案,我喜歡,但它也可能是好的,如果值也支持零。例如:值= [0,1,2]該邏輯失敗。 :) – Haranadh 2017-03-02 12:52:12
1,列表的不同排列。再次設置(list())'來拯救。 – Seth 2010-01-12 22:43:00
完美thx :-) – 2010-01-12 22:43:09