Python'da, bir öğeyi bir listedeki belirli bir dizine nasıl taşıyabilirim?
Python'da, bir öğeyi bir listedeki belirli bir dizine nasıl taşıyabilirim?
Yanıtlar:
insertBir liste yöntemini kullanın :
l = list(...)
l.insert(index, item)
Alternatif olarak, bir dilim gösterimi de kullanabilirsiniz:
l[index:index] = [item]
Listede zaten bulunan bir öğeyi belirtilen konuma taşımak istiyorsanız, onu silmeniz ve yeni konuma eklemeniz gerekir:
l.insert(newindex, l.pop(oldindex))
last index + 1hatasız ekleyebiliyorsunuz . Bu durumda öğe listeye eklenir.
a.insert(99999, 1) In [14]: a Out[14]: [...., 1]
Öğeyi herhangi bir yere değil, yalnızca sonuna kadar hareket ettiren biraz daha kısa bir çözüm şudur:
l += [l.pop(0)]
Örneğin:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0)). Sadece marjinal olarak daha uzun, ama çok daha okunaklı.
Öğenin konumunu bilmiyorsanız, önce dizini bulmanız gerekebilir:
old_index = list1.index(item)
sonra hareket ettirin:
list1.insert(new_index, list1.pop(old_index))
veya IMHO daha temiz bir yol:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass... istisnaları asla gizleme - bunun gibi bir örnekteki varsayılan şey daha temiz bir hata ifadesi veya baskı ifadesi sağlamak olmalıdır ... raise ValueError(f'Unable to move item to {new_index}')veya print(f'Moving item to {new_index} failed. List remains unchanged.'). Belki passbir işlev çağrıldığında try_to_move_itemveya bir şeyde işlemin sessizce başarısız olabileceği anlaşılırsa tamam olurdu .
Çok basit bir çözüm, ancak orijinal konumun dizinini ve yeni konumun dizinini bilmeniz gerekir:
list1[index1],list1[index2]=list1[index2],list1[index1]
Timeit ile aynı listedeki bir öğeyi taşımak için birkaç yöntemin profilini çıkardım. J> i ise kullanılacak olanlar şunlardır:
┌──────────┬──────────────────────┐ │ 14,4usec │ x [i: i] = x.pop (j), │ │ 14.5usec │ x [i: i] = [x.pop (j)] │ │ 15,2usec │ x.insert (i, x.pop (j)) │ └──────────┴──────────────────────┘
ve burada j <= i ise kullanılacak olanlar:
┌──────────┬───────────────────────────┐ │ 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] │ └──────────┴───────────────────────────┘
Yalnızca birkaç kez kullanırsanız çok büyük bir fark olmaz, ancak manuel sıralama gibi ağır şeyler yaparsanız, en hızlı olanı almak önemlidir. Aksi takdirde, en okunabilir olduğunu düşündüğünüz birini almanızı öneririm.