Dengan Python, bagaimana cara memindahkan item ke indeks tertentu dalam daftar?
Dengan Python, bagaimana cara memindahkan item ke indeks tertentu dalam daftar?
Jawaban:
Gunakan insertmetode daftar:
l = list(...)
l.insert(index, item)
Sebagai alternatif, Anda dapat menggunakan notasi irisan:
l[index:index] = [item]
Jika Anda ingin memindahkan item yang sudah ada dalam daftar ke posisi yang ditentukan, Anda harus menghapusnya dan menyisipkannya di posisi baru:
l.insert(newindex, l.pop(oldindex))
last index + 1tanpa kesalahan. Dalam kasus itu, elemen hanya ditambahkan ke daftar.
a.insert(99999, 1) In [14]: a Out[14]: [...., 1]
Solusi yang sedikit lebih pendek, yang hanya memindahkan item ke bagian akhir, bukan di mana pun adalah:
l += [l.pop(0)]
Sebagai contoh:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0)). Ini hanya sedikit lebih panjang, tetapi jauh lebih mudah dibaca.
Jika Anda tidak mengetahui posisi item, Anda mungkin perlu mencari indeksnya terlebih dahulu:
old_index = list1.index(item)
lalu pindahkan:
list1.insert(new_index, list1.pop(old_index))
atau IMHO cara yang lebih bersih:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
passpernyataan Anda ... jangan pernah menyembunyikan pengecualian - hal default dalam contoh seperti ini seharusnya memberikan pernyataan kesalahan atau pernyataan cetak yang lebih bersih ... raise ValueError(f'Unable to move item to {new_index}')atau print(f'Moving item to {new_index} failed. List remains unchanged.'). Mungkin passakan baik-baik saja jika dalam fungsi dipanggil try_to_move_itematau sesuatu sehingga dipahami bahwa operasi mungkin gagal secara diam-diam.
Solusinya sangat sederhana, tetapi Anda harus mengetahui indeks posisi awal dan indeks posisi baru:
list1[index1],list1[index2]=list1[index2],list1[index1]
Saya membuat profil beberapa metode untuk memindahkan item dalam daftar yang sama dengan timeit. Berikut ini yang akan digunakan jika j> i:
┌──────────┬─────────────────────┐ │ 14.4usec │ x [i: i] = x.pop (j), │ │ 14.5usec │ x [i: i] = [x.pop (j)] │ │ 15.2usec │ x. Masukkan (i, x.pop (j)) │ └──────────┴─────────────────────┘
dan di sini yang akan digunakan jika 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. Masukkan (i, x [j]); del x [j] │ └──────────┴──────────────────────────┘
Bukan perbedaan besar jika Anda hanya menggunakannya beberapa kali, tetapi jika Anda melakukan hal-hal berat seperti penyortiran manual, penting untuk mengambil yang tercepat. Jika tidak, saya sarankan untuk mengambil salah satu yang menurut Anda paling mudah dibaca.