listesinin başına tamsayı ekle Tamsayı ve bir listeye sahibim. Değişkenle başlayan ve listeyle biten yeni bir liste yapmak istiyorum. Yazma a + list
Hataları alıyorum. Derleyici, a
'u tamsayı olarak işler, böylece eki kullanamıyorum ya da genişletemiyorum. Bunu nasıl yaparsınız?Python
Python
cevap
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li # Don't use 'list' as variable name.
[5, 1, 2, 3]
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]
Nasıl çalışır:
array.insert(index, value)
array.insert(0, x)
uçlar ve
array.insert(len(array), x)
dizinin sonuna göre olarak kabul edilir
array.append(x)
.Negative değerlerine eşittir.
En verimli yaklaşım. [X] + [y] 'den daha hızlı. Çözümleri buraya bakın: http://stackoverflow.com/questions/8537916/whats-the-idiomatic-syntax-for-prepending-to-a-short-python-list –
Soru, açıkça bir _new_ listesinin oluşturulması gerektiğini belirtir. Yani bu hızlı olabilir - ama yanlış. ;-) – BlackJack
@BlackJack Sorun, listenin başlangıcına tamsayıyı eklemekle ilgili. Açıkladığı her şey, takip edilmesi gereken doğru şey değildir. Öyleyse neden yanlış yol almak için onu yönlendirmek? Onun ihtiyacı için yapabileceği daha iyi bir şey olduğunda. – Nullify
aynı yapmanın bir başka yolu, özellikle döngüler içinde, çoğu kez bu işlemi yapmaya çalışıyorsanız, bir liste yanlış veri yapısı olduğunu
list[0:0] = [a]
İlk 0'a ihtiyacınız yok. Kolon zaten başlangıçtan önce olduğunu söylüyor - my_list [: 0] = [a] bunu yapıyor. –
Zarif çözüm! – Shejo284
Not.
Listeleri ön modifikasyon için optimize edilmiştir ve somelist.insert(0, something)
bir O(n) operation olduğu değildir.
somelist.pop(0)
ve del somelist[0]
da O (n) işlemlerdir.
Kullanılacak doğru veri yapısı, collections
modülünden deque
şeklindedir. deques, listelerinkilere benzer bir arabirim ortaya çıkarır, ancak her iki uç noktadan yapılan değişiklikler için optimize edilir. Öne eklemeleri için appendleft
yöntemine sahipler.
Demo:
In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop
Sadece biraz kıyaslama yaptı. li.insert (0, a) 'li = [a] + li''den yaklaşık 5 kat daha hızlıdır. Bunu birçok kez yapıyorsanız bunu aklınızda bulundurun. –
@MarcelPfeiffer 'li.insert (0, a)' 'li' kelimesinin mutasyona uğradığına dikkat edilmelidir. li = [a] + li' tüm değerleri içerecek yeni bir örnek oluşturuyor. Diğer örneklerin liste örneğine başvurması durumunda bu önemli bir ayrımdır. – unholysampler
Python'un bir list.push_front (item) işlevi eklemesi güzel olurdu. Bu açık ve daha az hata eğilimli olacaktır. –