1

リスト内のすべてのアイテムをforループに渡す方法。反復が最初の要素から開始されない場合。

すぐに例にジャンプしましょう:

リストがあります ['a','b','c','d']

このリストのすべての項目をforループを使用して調べたいと思います。しかし、反復が最初の要素から開始しない場合は、戻って最初の要素から開始したいと思います。このようなもの:

lst = ['a','b','c','d']

start_index = 2

for loop_num in range(len(lst)):
    item = lst[start_index+loop_num]
    print item

それは私を印刷します:

>> c,d

IndexOutOfRangeエラーが発生するより

しかし、私は結果を次のようにしたいと思います。

>> c, d, a, b

start_index変数を変更して1結果を得ると、次のようになります。

b, c, d, a

の場合にはstart_index = 0

結果: a, b, c, d

4

5 に答える 5

5
lst = ['a','b','c','d']

start_index = 2

for loop_num in range(len(lst)):
    item = lst[(start_index+loop_num) % len(lst)]
    print item

%-特殊操作です。3%5 = 3、10%5 = 0、それについて読むRemainder and Python Doc

于 2012-05-11T17:30:20.663 に答える
4

Python

>>> l = ['a','b','c','d']
>>> def func(lst, idx=0):
...     for i in lst[idx:] + lst[:idx]: yield i
...
>>> list(func(l))
['a', 'b', 'c', 'd']
>>> list(func(l,2))
['c', 'd', 'a', 'b']
>>>

標準のPythonリストスライス構文、1つのオプションのargument(idx)、およびジェネレーターを使用します。

于 2012-05-11T17:29:30.537 に答える
2

%正しいインデックスを取得するために使用できます。

def rotated(lst, start=0):
    c = len(lst)
    for idx in xrange(c):
        yield lst[(idx + start) % c]


for x in rotated(['a','b','c','d'], 2):
    print x,
于 2012-05-11T17:32:18.600 に答える
2

C#で回答します。サイズxの配列(表示しやすい)があるとしましょう。開始インデックスはyであり、xよりも小さいが、0よりも大きい。

int i;
for(i=y;i<x;i++)
{
  //do something with MyArray[i]¸
  if(i==x)
  {
    for(i=0;i<y;i++)
    {
      //do something with MyArray[i]
    }
    i=x;
  }
}
于 2012-05-11T17:33:11.787 に答える
1

Rubyの配列にvalues_atは、インデックスまたはインデックスの範囲(任意の量を組み合わせたもの)を受け取るメソッドがあります。forループはほとんど使用されていません-これは私が最初に書いたものです。

lst = ['a','b','c','d']
start_index = 2

for v in lst.values_at(start_index..-1, 0...start_index)
  puts v
end
于 2012-05-13T20:53:47.960 に答える