2016-10-11 13 views
2

リストをループするために列挙を使用するコードを書きました。Pythonは特定のインデックスからループを継続します

for index, item in enumerate(list[start_idx:end_idx]) 
    print('index [%d] item [%s]'%(str(index), item)) 

リストの項目は単なる文字列です。時にはリスト全体を列挙したくない場合もありますが、リストをスライスして別のものを行うこともあります。

私が問題を抱えている部分は、pythonの列挙関数です。

ドキュメントは、あなたが行うことができると言う。

for index, item in enumerate(list, start_index): 
    print(str(index)) 

上記のコードは、私が期待したもの行いません。私は列挙は開始位置で開始し、最後に停止するが、それはしない。

私は小さなプログラムを書いていますが、それは確かにうわーです。

>>> for i, x in enumerate(range(0,20),start=4): 
...  print(str(i)+'\t'+str(x)) 
... 
4 0 
5 1 
6 2 
7 3 
8 4 
9 5 
10 6 
11 7 
12 8 
13 9 
14 10 
15 11 
16 12 
17 13 
18 14 
19 15 
20 16 
21 17 
22 18 
23 19 

インデックス4から始まり、最後までループすることが期待されます。したがって、4-19の範囲が得られますが、インデックスを開始するだけですが、0-19まで繰り返します。

質問Pythonの特定のインデックスから繰り返しループを開始する方法はありますか?

私の予想結果は

>>> for i, x in enumerate(range(0,20),start=4): 
...  print(str(i)+'\t'+str(x)) 
... 
4 0 # skip 
5 1 # until 
6 2 # this 
7 3 # item 
8 4 
9 5 
10 6 
11 7 
12 8 
13 9 
14 10 
15 11 
16 12 
17 13 
18 14 
19 15 
20 16 
21 17 
22 18 
23 19 

代わりの提供開始位置のインデックスを開始するだろう。

あなたが行うことができます
+1

'start'引数は化粧品、私が言う、です。通常、デフォルトではなく1から数え始めたいときに便利です –

+0

ところで、私はあなたがここで何をしているのかについて少し匂いが感じられます。 'enumerate'は必要ありません。なぜなら、リストのメンバーを変更して、それらを元に戻すことを意味するからです。静的にリストを処理する場合、インデックスをまったく管理する必要はなく、単純にスライスを繰り返し処理できます。 – kojiro

答えて

2

は、実際にそれが作るために大したことではありませんrange(n)[:4]がまだrangeのオブジェクト(@MosesKoledoyeはPython 3のフィーチャーだと言いました。しかし、あなたがリストを持っていれば、新しいリストを作成しないためにitertools.isliceを選択すると、iteratorが返されます。

from itertools import islice 
for index, item in enumerate(islice(range(20), 4, None)): 
    print(index, item) 

出力

0 4 
1 5 
2 6 
3 7 
4 8 
... 
+0

* 'range(n)[:4]'はまだ範囲オブジェクトです* Python 3のみに適用されます –

+0

@MosesKoledoyeあなたが正しいです、私は答えて言及します。 –

+0

これを少し編集しました。インデックスの場合、列挙する項目(islice(range)(20)、4、None)、4);それはあなたが助けてくれてうれしい、 – user1610950

0

enumerate

for index, item in enumerate(list[4:]): 
    print(str(index)) 
+0

これを行うと、リストのインデックスは列挙型の出力と揃えられません。 – kojiro

+0

@kojiroそれでは、列挙する項目(list [4:]、4)の '' index ''に対して '' – JMat

1

startパラメータは、反復可能の要素を選択し得るものとは何の関係もありません。それはちょうど何番から始めるべきかを列挙します。

>>> list(enumerate(range(3))) 
[(0, 0), (1, 1), (2, 2)] 
>>> list(enumerate(range(3), 1)) 
[(1, 0), (2, 1), (3, 2)] 

あなたが特定のインデックスから開始する場合は、start引数sliceを提供する必要があります:あなたはrangeオブジェクトを得た場合

for i, v in enumerate(alist[4:], 4): 
    ... 
関連する問題