2012-08-17 20 views
17

Đôi khi, một phần tử có thể lặp lại có thể không thể ghi lại được. Nói trở về từ itertools.permutations:Các cách tốt hơn để lấy phần tử thứ n từ một lần lặp không thể ghi lại được

ps = permutations(range(10), 10) 
print ps[1000] 

Python sẽ phàn nàn rằng 'itertools.permutations' object is not subscriptable

Tất nhiên người ta có thể thực hiện next() bởi n lần để có được những yếu tố thứ n. Chỉ cần tự hỏi có cách nào tốt hơn để làm như vậy?

+1

tốt hơn về những gì? hiệu quả hoặc không gian. –

+1

một cách nhiệt tình. – clwen

Trả lời

24

Chỉ cần sử dụng nth recipe từ itertools

>>> from itertools import permutations, islice 
>>> def nth(iterable, n, default=None): 
     "Returns the nth item or a default value" 
     return next(islice(iterable, n, None), default) 

>>> print nth(permutations(range(10), 10), 1000) 
(0, 1, 2, 4, 6, 5, 8, 9, 3, 7) 
+2

Đây là một điều tuyệt vời. (+1) – mgilson

Các vấn đề liên quan