私は大きな iterable を持っています。実際、大きな iterable は以下によって与えられます:
itertools.permutations(range(10))
100万番目の要素にアクセスしたいです。私はすでにいくつかの異なる方法で問題を解決しています。
iterable をリストにキャストして 1000000 番目の要素を取得する:
return list(permutations(range(10)))[999999]
要素を 999999 まで手動でスキップ:
p = permutations(range(10)) for i in xrange(999999): p.next() return p.next()
要素を手動でスキップ v2:
p = permutations(range(10)) for i, element in enumerate(p): if i == 999999: return element
itertools から islice を使用する:
return islice(permutations(range(10)), 999999, 1000000).next()
しかし、私はまだそれらのどれもがそれを行うためのpythonのエレガントな方法ではないように感じていません. 最初のオプションはコストが高すぎます。単一の要素にアクセスするためだけに iterable 全体を計算する必要があります。私が間違っていなければ、islice は方法 2 で行ったのと同じ計算を内部的に実行し、ほぼ正確に 3 番目と同じです。おそらく、さらに冗長な操作があります。
だから、私はただ興味があります.Pythonにイテラブルの具体的な要素にアクセスするための他の方法があるかどうか、または少なくとも最初の要素をスキップするためのよりエレガントな方法があるかどうか、または単に1つを使用する必要があるかどうか疑問に思っています上記の。