从unsubscriptable iterable中获取第n个元素的更好方法

时间:2012-08-17 14:36:33

标签: python iterator

有时,iterable可能不是可订阅的。说从itertools.permutations返回:

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

Python会抱怨'itertools.permutations' object is not subscriptable

当然,可以next()次执行n来获取第n个元素。只是想知道有更好的方法吗?

2 个答案:

答案 0 :(得分:27)

只需使用itertools

中的nth食谱
>>> 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)

答案 1 :(得分:0)

更具可读性的解决方案是:

next(x for i,x in enumerate(ps) if i==1000)