2015-04-23 31 views
2

如果我有五個項目的列表,並且我希望獲得該列表的每個排列,那麼將如何保持第一個和最後一個項目相同?如何將列表的第一項添加到該列表的所有排列的末尾?

如同那樣,該列表中的五個項目將產生列表的120個排列,其中列表中將有六個項目,但是第一個和最後一個項目將是相同的。以下是我迄今爲止所做的。任何幫助將不勝感激。

from itertools import permutations 
airportlist = ["airport1", "airport2", "airport3", "airport4", "airport5"] 

permlist = permutations(airportlist, 5) 
print(permlist) 
print(list(permlist)) 

for i in list(permlist): 

    newlist = (list(i)) 

    print(newlist)# getting e.g. ['airport1', 'airport5', 'airport2', 'airport4', 'airport3'] 

    print(list(i)[0]) # getting (to continue above example) airport1 
    newerlist = (list(i).append((list(i)[0]))) 

    print(newerlist)#getting None but want ['airport1', 'airport5', 'airport2', 'airport4', 'airport3', 'airport1'] 

這可能嗎?

回答

4

如果我正確地獲得了您的意見,您希望保持第一個和最後一個機場與原始列表相同,並生成中間元素的排列。在這種情況下,你可以不喜歡以下,其中您生成只在中間的元素排列:

>>> from itertools import permutations 
>>> airports = ["airport1", "airport2", "airport3", "airport4", "airport5"] 
>>> [airports[:1] + list(x) + airports[-1:] for x in permutations(airports[1:-1])] 
[['airport1', 'airport2', 'airport3', 'airport4', 'airport5'], ['airport1', 'airport2', 'airport4', 'airport3', 'airport5'], ['airport1', 'airport3', 'airport2', 'airport4', 'airport5'], ['airport1', 'airport3', 'airport4', 'airport2', 'airport5'], ['airport1', 'airport4', 'airport2', 'airport3', 'airport5'], ['airport1', 'airport4', 'airport3', 'airport2', 'airport5']] 

編輯

重讀你的問題,我認爲你可能想要創建排列,開始和結束機場是相同的,並且中間的值得到排列,這很簡單:

>>> combos = [list(x) + [x[0]] for x in permutations(airports)] 
>>> for x in combos: print x 
['airport1', 'airport2', 'airport3', 'airport4', 'airport5', 'airport1'] 
['airport1', 'airport2', 'airport3', 'airport5', 'airport4', 'airport1'] 
... 
... 
['airport5', 'airport4', 'airport3', 'airport1', 'airport2', 'airport5'] 
['airport5', 'airport4', 'airport3', 'airport2', 'airport1', 'airport5'] 
+0

感謝您的快速回復!這很棒,但不是我想要的。 –

+0

我想要['airport1','airport3','airport2','airport4','airport5'],['airport2','airport3','airport1','airport4','airport5'] ...#全部120個排列],機場1,機場3,機場2,機場4,機場5,機場1,機場2,機場3,機場1,機場4,機場5, ,'airport2']即仍然排列所有列表,但每次將第一項添加到列表的末尾。那有意義嗎? –

+0

@GavinMcCoy檢查編輯。 –

0

我想你想要的是:

[airportlist[:1] + list(i) + airportlist[:1] for i in permutations(airportlist[1:])] 
1

只是,好了,每個列表的第一項追加到每個列表。

from itertools import permutations 
airportlist = ["airport1", "airport2", "airport3"] 

perms = permutations (airportlist) 
newperms = [list (x) + [x[0]] for x in perms] 

for element in list (newperms): 
    print element 

結果是:

['airport1', 'airport2', 'airport3', 'airport1'] 
['airport1', 'airport3', 'airport2', 'airport1'] 
['airport2', 'airport1', 'airport3', 'airport2'] 
['airport2', 'airport3', 'airport1', 'airport2'] 
['airport3', 'airport1', 'airport2', 'airport3'] 
['airport3', 'airport2', 'airport1', 'airport3'] 
相關問題