Pythonでは、長さxの配列があります。
配列=[0、1、2、3、4、5]とします
次のような結果の上の配列から取得したい:[1、2、3、4、5、0]
したがって、基本的には、最初の用語をスキップして、配列が終了した後にループし、最後にスキップされた用語で停止することはしません。私はPythonにかなり慣れていないので、自分でそれを理解することができませんでした+グーグルは役に立ちませんでした。
助けてください、大いに感謝します!
スライスとappend()
を使用します。
lst = [0, 1, 2, 3, 4, 5]
new_lst = lst[1:]
new_lst.append(lst[0])
new_lst.extend(lst[:1])
ヘッドスライスが単一の要素でappend(lst[0])
ある場合は、単一の値をラップするためだけに別の一時リストを作成する必要がないため、おそらくわずかに効率的です が、を使用することもできます。ただし、バージョンlst[1:] + list[:1]
と比較してさらに別の使い捨てリストオブジェクトを作成する必要があるため、おそらく最悪です。extend()
スライスを使用しますが、別のオプション(通常、この単純なものではcollections.dequeを使用するのはやり過ぎです)
小さな例:
>>> e = [0, 1, 2, 3, 4, 5]
>>> from collections import deque
>>> d = deque(e)
>>> d
deque([0, 1, 2, 3, 4, 5])
>>> d.rotate(1)
>>> d
deque([5, 0, 1, 2, 3, 4])
>>> d.rotate(-2)
>>> d
deque([1, 2, 3, 4, 5, 0])
e = [0, 1, 2, 3, 4, 5]
e.append(e.pop(0))
なぜ人々はインプレース変換をすぐに考えないのですか?
さらに別の方法、それはより一般的かもしれません。良い名前が思いつかなかった...
def iterate_from(l, start):
for i in range(start, len(l)):
yield l[i]
for i in range(start):
yield l[i]
次の出力が得られました。
In [39]: iterate_from(range(7), 3)
Out[39]: <generator object iterate_from at 0x120259b40>
In [40]: list(iterate_from(range(7), 3))
Out[40]: [3, 4, 5, 6, 0, 1, 2]
リストをループするときは、そのための新しい変数も必要ありません
for i in my_list[1:] + my_list[:1]:
print i,
print
for i in my_list:
print i,
戻ります:
1 2 3 4 5 0
0 1 2 3 4 5
このようにして、元のmy_listに変更を加えることはありません。
また、ここを見てください:Pythonのスライス表記を説明してください
スライスを使用して、関心のあるリストの部分を取得し、それらを一緒に追加します。
>>> lst = [0, 1, 2, 3, 4, 5]
>>> lst[1:] + lst[:1]
[1, 2, 3, 4, 5, 0]
lst[1:]
最初のインデックス(両端を含む)からリストの最後まですべてが表示されます。
lst[:1]
リストの最初から最初のインデックス(排他的)まですべてを提供します。(これはと同等です[lst[0]]
)