1

値が 0 から 30 のリストがあります。

オフセットを追加してこれらの値 (範囲内) をループするにはどうすればよいですか?

意味が分からないかもしれないので、ちょっとした図を作ってみました:

ダイアグラム

4

5 に答える 5

5

これにより、ラップアラウンドのケースが処理されます

def list_range(offset, length, l):
    # this handles both negative offsets and offsets larger than list length
    start = offset % len(l)
    end = (start + length) % len(l)
    if end > start:
        return l[start:end]
    return l[start:] + l[:end]

編集: 負のインデックス ケースを処理するようになりました。

編集 2: 対話型シェルでの使用例。

>>> l = range(30)
>>> list_range(15,10,l)
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
>>> list_range(25,10,l) # I'm guessing the 35 in the example was accidental
[25, 26, 27, 28, 29, 0, 1, 2, 3, 4]
>>> list_range(-8,10,l)
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21]

編集 3: コメントごとに -8,10 ケースを無視するように更新

編集 4: データをループするよりも効率的であると思われるため、リスト スライスを使用しています。私はちょうどそれをテストし、私の予感は正しかった.mVChr のリストをループするバージョンよりも約 2 倍高速である. ただし、それは時期尚早の最適化である可能性があり、よりpythonicな回答(リスト内包表記のワンライナー)の方が良い場合があります

于 2013-02-22T23:32:15.497 に答える
2

これは、負のオフセットを持つ最後のケースを除くすべてのケースで機能します。

[(i + offset) % max_range for i in xrange(count)]

# e.g.
max_range = 30
count = 10
offset = 15
print [(i + offset) % max_range for i in xrange(count)]
# [15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
offset = 25
print [(i + offset) % max_range for i in xrange(count)]
# [25, 26, 27, 28, 29, 0, 1, 2, 3, 4]

最後のケースをどのように処理するのが最善かはわかりませんが、これで正しい方向に進むはずです。

于 2013-02-22T23:36:26.390 に答える
0

言っていただけませんか

List = range(30)
newList = []
for i in range(n):
    newList.append(List[n+offset])

これは超一般的ではありませんが、サンプル ファイルにリストされているケースでは機能するはずです。

于 2013-02-22T23:30:12.610 に答える
0
def loopy(items, offset, num):
    for i in xrange(num):
        yield items[(offset + i) % len(items)]


>>> x = range(30)
>>> print list(loopy(x, 25, 10))
[25, 26, 27, 28, 29, 0, 1, 2, 3, 4]
于 2013-02-22T23:37:07.250 に答える
0

わかりましたので、リストがあるとしましょう。新しいリストを取得します

list=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
newlist=[]
#let's say I want 5 through 10
for n in range(5,11):
   newlist.append(list[n])

newlist は 5 ~ 10 になります。ループする数値を使用するには負数を使用するため、range(-1,4) のように 15,0,1,2,3,4 が得られます。

于 2013-02-22T23:37:12.357 に答える