2015-09-08 11 views
5

yapmak:liste için atamasının nokta üst üste ne yapar [:] = [...] Aşağıdaki kodu genelinde geldi Python

# O(n) space  
def rotate(self, nums, k): 
    deque = collections.deque(nums) 
    k %= len(nums) 
    for _ in xrange(k): 
     deque.appendleft(deque.pop()) 
    nums[:] = list(deque) # <- Code in question 

nums[:] =nums = değil o ne yapar? Bu konuda, nums[:]nums bunu ne yapar?

+0

ile dizinin uzunluğunu yerini alacak, tam anlamıyla sorunun başlığını almak İnanıyorum. [Python'da \ [: \] ne demektir) (http://stackoverflow.com/questions/6167238/what-does-in-python-mean) – CollinD

+1

@CollinD Bu soruyu görmediniz, teşekkürler. Ama yine de yinelenen oylama dilimi atama düşünmedim çünkü yeniden açmaya oy vermişti –

+0

atama soru cevap vermiyor. Yanlış bağlantıyı açmış olmalıyım, çünkü kesinlikle dilim atamasını açıklıyor. –

cevap

15

Bu sözdizimi bir dilim görevi. [:] bir dilim, tüm liste anlamına gelir. nums[:] = ve nums = arasındaki fark, ikincisinin orijinal listedeki öğelerin yerini almamasıdır. Fark sadece yukarıdaki dizisinden [:] kaldırmak görmek için listede

>>> a = list(range(10)) 
>>> b = a 
>>> a[:] = [0, 0, 0] # changes what a and b both refer to 
>>> b 
[0, 0, 0] 

iki referanslar olduğunda bu gözlemlenebilir. list değişken adı değil yerleşik ise

>>> a = list(range(10)) 
>>> b = a 
>>> a = [0, 0, 0] # a now refers to a different list than b 
>>> b 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

o Sorulan ve cevap üç nokta

>>> list = [1,2,3,4] 
>>> list[:] = [...] 
>>> list 
[Ellipsis] 
+0

Basitçe söyleyin, (liste [:] = ...) değer tipidir, ancak (liste = ...) referans türünü –

+1

@Brady Huang bu doğru bir şekilde açıklamıyor –

3

nums = foonums ismini foo'a atıfta bulunduğu aynı nesneye başvurmak için yeniden adlandırır.

nums[:] = foo böylece orijinal nesnesinin içeriğini foo içeriğinin bir kopyasını yapmak nums belirtir, nesne üzerinde dilim atama çağırır.

bu deneyin:

>>> a = [1,2] 
>>> b = [3,4,5] 
>>> c = a 
>>> c = b 
>>> print(a) 
[1, 2] 
>>> c = a 
>>> c[:] = b 
>>> print(a) 
[3, 4, 5] 
İlgili konular