Pythonリストのすべての値をループする方法はありますか?例えば特定のインデックスから始まるすべてのPythonリスト値を反復する
:
li = ['a', 'b', 'c', 'd']
スタートがインデックス1でループして、結果をプリントアウト。私の予想される出力は次のようになります。私は仕事をすることができ、「forループ」2を使用して知っているが、これを行うに任意のより良い方法はあり
['b', 'c', 'd', 'a']
?
Pythonリストのすべての値をループする方法はありますか?例えば特定のインデックスから始まるすべてのPythonリスト値を反復する
:
li = ['a', 'b', 'c', 'd']
スタートがインデックス1でループして、結果をプリントアウト。私の予想される出力は次のようになります。私は仕事をすることができ、「forループ」2を使用して知っているが、これを行うに任意のより良い方法はあり
['b', 'c', 'd', 'a']
?
組み込み関数を使用することが推奨されますが、このように自分で行うこともできます。
li = ['a', 'b', 'c', 'd']
i_offset = 1
for i in range(len(li)):
print (li[(i+i_offset) % len(li)])
は、あなたの質問を約(より神託のように)リストを印刷答えるために:
約 (単純なインデックス操作で)を反復あなたの質問に答えるために:li = ['a', 'b', 'c', 'd'] i_offset = 1 print ([li[(i+i_offset) % len(li)] for i,x in enumerate(li)])
キューに変換し、それを達成するためにリストに戻す必要はありません。
問題を解決するのにデューク(deque)は必要ではないが、組み込み(誰もがそれにアクセスできるように)であり、回転をネイティブにサポートしているというのは正しい。したがって、使用する必要がないにもかかわらず、コードがより簡単に(おそらく)高速になります。それを元に戻すことは完全にオプションであることに注意してください(私の答えではっきりしない場合は明確にすることができます)、 'deque'自体は繰り返しになるとリストのようなものです。私はあなたの答えを編集してうれしく思います。実際に問題を解決しました。 :) – MSeifert
また、質問にはpython-3.xタグが付いているので、おそらく括弧( '()')を 'print'sに追加するべきです。 – MSeifert
あなたの入力用の@MSeifertをありがとう、私は私の答えを編集しました。あなたの答えは本当に面白いので、Pythonの優れた機能を示しています。組み込み関数を使いやすくするためには良いアプローチです。 Pythonのdocは 'deque'がすべての要素を新しいオブジェクトに追加すると述べて以来、もっと速いとは思えません。あなたは私の第一の答えについて正しいです、私は夜遅くそうすべきではありません:) – RaphaMex
あなたはスライスでこれを行うことができ、次のいずれかニシキヘビ> = 3.5
のために働く
l2 = [*li[1:], *li[:1]]
for i in l2:
print(i)
を。それ以前のバージョンの場合は、li[1:] + li[:1]
またはchain(li[1:],li[:1])
とchain
からitertools
を使用できます。また
、あなたができるitertools
モジュールから他の二つのヘルパーを使用して:余分なリストを作成しません
# call list on it if you need a list object
it = islice(cycle(li), 1, len(li)+1)
for i in it:
print(i)
。
が>>> from collections import deque
>>> li = deque(['a', 'b', 'c', 'd'])
>>> li.rotate(-1)
>>> li
deque(['b', 'c', 'd', 'a'])
は、念のためにあなたが本当に結果としてリストが欲しいあなたはいつも戻って、再びそれを変換することができます:
:print(i)はPythonの任意のバージョンで動作し、最も簡単な方法はIMOです。 – Hami
さて、あなただけのビルトイン"rotating"サポートcollections.deque
クラス、使用することができ
>>> list(li)
['b', 'c', 'd', 'a']
独自のジェネレータ関数looper
を定義し、それによって返されるジェネレータをループすることができます。ジェネレータ関数は、第1引数としてリストをとり、第2入力として所望の開始インデックスを取る。モジュロ演算子(%
)は、リストの境界内でインデックスを保持するための手口を行います。
def looper(my_list, starting_ix):
len_ml = len(my_list)
for i in range(starting_ix, len_ml + starting_ix):
yield my_list[i % len_ml]
li = ['a', 'b', 'c', 'd']
for item in looper(li, 1):
print item
追加リストの後にリストし、start_index
からstart_index+len(list)
までを繰り返します。
ary = [1,2,3,4,5]
start_idx = 3
for num in (ary+ary)[start_idx:start_idx+len(ary)]:
print(num)
リストはどれくらい大きいですか? – Marat