2012-08-17 21 views
17

कभी-कभी एक पुनरावर्तनीय सबस्क्राइबल नहीं हो सकता है।एनएसबी तत्व को अनुपलब्ध करने योग्य करने योग्य तरीके से प्राप्त करने के बेहतर तरीके

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

अजगर शिकायत है कि 'itertools.permutations' object is not subscriptable

बेशक

एक n वें तत्व प्राप्त करने के लिए बार n द्वारा next() प्रदर्शन कर सकते हैं: itertools.permutations से वापसी का कहना है। बस सोचने के लिए बेहतर तरीके हैं?

+1

बेहतर से nth नुस्खा का उपयोग क्या करने के मामले में? दक्षता या अंतरिक्ष। –

+1

एक पाइथोनिक तरीका। – clwen

उत्तर

24

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

यह एक सुंदर बात है। (+1) – mgilson