1

私はPythonでリストを持っていて、[a,b,c,d]それを使用して左にシフトしました. for インデックスをループすると、結果は[b,c,d,a].

今、私はそれを右にシフトすることを計画しており、結果は になると[d,a,b,c]思いますが、そのコードを書くことができません。

コードとコンセプトを提案してくれる人はいますか?

これは、左にシフトするための私のコードでした。

def shift_left(L):
    first_item = L[0]
    for i in range (1, len(L)):
        L[i-1] = L[i] 
    L[-1] = first_item
4

3 に答える 3

7

これには a を使用するのが最善collections.dequeです。

>>> from collections import deque
>>> l = ['a','b','c','d']
>>>
>>> v = deque(l)
>>> v.rotate(1)
>>> v
deque(['d', 'a', 'b', 'c'])
>>>
>>> v = deque(l)
>>> v.rotate(-1)
>>> v
deque(['b', 'c', 'd', 'a'])

を介してリストに戻すことができますlist(v)

于 2013-08-09T14:51:41.537 に答える
5

popとを使用するだけinsertです:

def shift_right(l):
    l.insert(0, l.pop())

popリストの最後の項目を削除して返し、insertインデックスに項目を挿入します。

于 2013-08-09T14:50:52.017 に答える
1

要素が単一タイプの場合は、NumPy 配列を作成して「ローリング」することを検討してください。

import numpy as np
arr = np.array(my_list)
shifted_left = np.roll(arr, -1)
shifted_right = np.roll(arr, 1)
于 2013-08-09T14:52:23.790 に答える