web-dev-qa-db-ja.com

python:リスト内の特定の範囲を繰り返す

リストがあるとしましょう:

listOfStuff =([a,b], [c,d], [e,f], [f,g])

私がやりたいのは、次のコードのような方法で中間の2つのコンポーネントを反復処理することです。

for item in listOfStuff(range(2,3))
   print item

最終結果は次のようになります。

[c,d]
[e,f]

現在、このコードは機能しませんが、私がやろうとしていることを理解していただければ幸いです。

25
ccwhite1
listOfStuff =([a,b], [c,d], [e,f], [f,g])

for item in listOfStuff[1:3]:
    print item

Tupleのスライスを反復処理する必要があります。 1は最初に必要な要素であり、3(実際には2 + 1)は、必要のない最初の要素です。

リスト内の要素は0から数えられます:

listOfStuff =([a,b], [c,d], [e,f], [f,g])
               0      1      2      3

[1:3]は要素1と2を取ります。

37
eumiro

リストのスライスを反復処理するよりメモリ効率の良い方法は、itertoolsモジュールのislice()を使用することです。

from itertools import islice

listOfStuff = (['a','b'], ['c','d'], ['e','f'], ['g','h'])

for item in islice(listOfStuff, 1, 3):
    print item

# ['c', 'd']
# ['e', 'f']

ただし、範囲の開始値が大きい値である場合、islice_は項目を返す前に最初の開始値1の項目を反復処理する必要があるため、これはパフォーマンスの点で比較的非効率的です。

8
martineau

スライシングを使用します。

for item in listOfStuff[1:3]:
    print item
4
Håvard

iterビルトインを使用して:

l = [1, 2, 3]
# i is the first item.
i = iter(l)
next(i)
for d in i:
    print(d)
3
Elior Malul