簡體   English   中英

Python排列順序

[英]Python permutations in order

listA = ["A","B","C","D"]

由此,我只需要以下輸出:

["A","B","C"]
["B","C","D"]
["C","D","A"]
["D","A","B"]

我在這里查看了有關置換的各種問題,但是到目前為止,我還無法實現。 任何幫助將不勝感激。

另一種方式-蠻力,

def permutation(L):
    for i in range(len(L)):
        x = L[i:i+3]
        length = len(x)
        if length != 3:
            x = x + L[:3-length]
        print(x)


L = ["A","B","C","D"]
permutation(L)

您可以使用itertools.cycleitertools.islice

要獲得顯示的訂單(如@tobias_k建議):

>>> from itertools import cycle, islice
>>> listA = ["A","B","C","D"]
>>> [list(islice(cycle(listA), i, i+3)) for i in range(len(listA))]
[['A', 'B', 'C'], ['B', 'C', 'D'], ['C', 'D', 'A'], ['D', 'A', 'B']]

要獲取其他順序排序:

>>> it = cycle(listA)
>>> [list(islice(it,3)) for _ in range(len(listA))]
[['A', 'B', 'C'], ['D', 'A', 'B'], ['C', 'D', 'A'], ['B', 'C', 'D']]

感謝您的所有答復。 我收到了一個想在這里分享的朋友的另一個答案。 就像這樣

listA = ["A","B","C","D"]
listB = listA + [listA[0]] + [listA[1]]

catch = []
for i in range(len(listA)):
    A = listB[i]
    B = listB[i+1]
    C = listB[i+2]
    catch.append([A,B,C])
print catch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM