>>> from itertools import islice, chain
>>> L = ["2H", "AH", "KH", "QH", "JH", "0H", "9H"]
>>> list(chain.from_iterable(
zip(*[islice(reversed(L),i,None) for i in range(j)])
for j in range(3,6)))
[('9H', '0H', 'JH'), ('0H', 'JH', 'QH'), ('JH', 'QH', 'KH'), ('QH', 'KH', 'AH'),
('KH', 'AH', '2H'), ('9H', '0H', 'JH', 'QH'), ('0H', 'JH', 'QH', 'KH'),
('JH', 'QH', 'KH', 'AH'), ('QH', 'KH', 'AH', '2H'), ('9H', '0H', 'JH', 'QH', 'KH'),
('0H', 'JH', 'QH', 'KH', 'AH'), ('JH', 'QH', 'KH', 'AH', '2H')]
說明
此解決方案基於使用zip
。
>>> zip(L,L)
[('2H', '2H'), ('AH', 'AH'), ('KH', 'KH'), ('QH', 'QH'), ('JH', 'JH'), ('0H', '0H'), ('9H', '9H')]
這顯示了一個例子,說明zip
工作,採取一個項目從它的每一個paramters在一起。
>>> zip(L,L[1:])
[('2H', 'AH'), ('AH', 'KH'), ('KH', 'QH'), ('QH', 'JH'), ('JH', '0H'), ('0H', '9H')]
通過從第二個參數列表中的第一個項目開始,您可以獲得每兩個項目。
>>> zip(L,L[1:],L[2:])
[('2H', 'AH', 'KH'), ('AH', 'KH', 'QH'), ('KH', 'QH', 'JH'), ('QH', 'JH', '0H'), ('JH', '0H', '9H')]
相同3件物品。
>>> zip(*[L[i:] for i in range(3)])
[('2H', 'AH', 'KH'), ('AH', 'KH', 'QH'), ('KH', 'QH', 'JH'), ('QH', 'JH', '0H'), ('JH', '0H', '9H')]
要做到這一點自動您可以使用*
(圖示)從列表中理解得到zip
的論點。
在該示例中,結果相反,因此reversed
給出了列表中的反向迭代器。要切片迭代器,必須使用來自itertools的islice
。 islice
以可迭代的形式跟隨索引開始切片和索引以結束它。可以使用None
一直到迭代結束。
>>> zip(*[islice(reversed(L),i,None) for i in range(3)])
[('9H', '0H', 'JH'), ('0H', 'JH', 'QH'), ('JH', 'QH', 'KH'), ('QH', 'KH', 'AH'), ('KH', 'AH', '2H')]
這樣就給出了每3個項目的所有結果。現在每4件和5件都需要,因此該操作是針對range(3)
,range(4)
和range(5)
執行的。
(zip(*[islice(reversed(L),i,None) for i in range(j)]) for j in range(3,6))
這將使發電機與每個3
,4
和5
列表,但他們需要的所有一個列表。它們可以與chain.from_iterable
鏈接在一起,結果被轉換爲list
。
我愛你。非常感謝! –
只是想知道你有什麼辦法可以聯繫你嗎? Facebook的? –
@AdhyKarina哈哈哈我不知道該說什麼,歡迎您:D與我聯繫是什麼原因?我不需要任何東西,謝謝是足夠的:) – jamylak