回答:
insert
リストの方法を使用します。
l = list(...)
l.insert(index, item)
または、スライス表記を使用できます。
l[index:index] = [item]
すでにリストにあるアイテムを指定した位置に移動したい場合は、削除して新しい位置に挿入する必要があります。
l.insert(newindex, l.pop(oldindex))
last index + 1
エラーなく挿入できます。その場合、要素はリストに追加されるだけです。
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
アイテムを最後まで移動するだけで、どこにも移動しない、少し短いソリューションは次のとおりです。
l += [l.pop(0)]
例えば:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
。わずかに長くなりますが、読みやすくなっています。
アイテムの位置がわからない場合は、最初にインデックスを見つける必要があります。
old_index = list1.index(item)
次に移動します。
list1.insert(new_index, list1.pop(old_index))
または私見よりきれいな方法:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
発言にうんざりするのは正しいと思います...例外を隠さないでください-このような例のデフォルトは、より明確なエラー文または印刷文を提供することです... raise ValueError(f'Unable to move item to {new_index}')
またはprint(f'Moving item to {new_index} failed. List remains unchanged.')
。pass
呼び出された関数try_to_move_item
か何かでそれが操作が黙って失敗するかもしれないことを理解するようになら、多分大丈夫でしょう。
ソリューションは非常に単純ですが、元の位置のインデックスと新しい位置のインデックスを知っている必要があります。
list1[index1],list1[index2]=list1[index2],list1[index1]
私は、timeitを使用して同じリスト内で項目を移動するいくつかの方法をプロファイルしました。以下は、j> iの場合に使用するものです。
┌──────────┬──────────────────────┐ │14.4usec│x [i:i] = x.pop(j)、│ │14.5usec│x [i:i] = [x.pop(j)]│ │15.2usec│x.insert(i、x.pop(j))│ └──────────┴──────────────────────┘
そしてここでj <= iの場合に使用するもの:
┌──────────┬───────────────────────────┐ │14.4usec│x [i:i] = x [j] ,; del x [j]│ │14.4usec│x [i:i] = [x [j]]; del x [j]│ │15.4usec│x.insert(i、x [j]); del x [j]│ └──────────┴───────────────────────────┘
数回しか使用しない場合は大きな違いはありませんが、手動による並べ替えなどの重い処理を行う場合は、最速のものを使用することが重要です。そうでなければ、私はあなたが最も読みやすいと思うものだけを取ることをお勧めします。