>>> 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