我有一個輸入 array = [1,3,8,5,22,18,20,15,7,6,5]
我想對串列中從 8 到 20 的數字進行排序,包括 8 和 20。
為什么以下不起作用:
array[2:7] = array[2:7].sort() #TypeError: can only assign an iterable
盡管
array[2:7] = sorted(array[2:7])
作品。
我從概念上理解sort()對輸入進行就地排序,同時sorted()創建一個新串列。但我無法理解這與上述內容有何聯系。
是因為sort()更改了索引,從而導致第一個實體不起作用?但這不可能,因為錯誤是 TypeError ,它必須是可迭代的?
uj5u.com熱心網友回復:
不同之處在于它sorted可以應用于任何可迭代物件,無論是串列還是不可變元組、集合甚至生成器,都會生成一個串列。另一方面,sort是一些可變和有序容器提供的一種方法,并且會在其容器中發生變化。
發生的情況是切片回傳一個副本,該副本將按方法正確排序sort,但方法的回傳值sort是...... None!所以你的代碼結束于:
array[2:7] = None
...并且None不是可迭代的...
uj5u.com熱心網友回復:
sort() 不起作用,因為它不回傳陣列,它只會更改現有陣列。
這會起作用:
arr_slice = array[2:7]
arr_slice.sort() # Sorts arr_slice but returns None
array[2:7] = arr_slice
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417901.html
標籤:
