首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python zip 後 sort 導致 print 為 None 的原因與修正

     編輯:程式設計疑難解答

現象

a = [0,1,2,3,4,5,6,7,8,9]
b = [9,8,7,6,5,4,3,2,1,0]
c = zip(a,b)
c = list(c)  # Python 3 zip 回傳迭代器,需轉列表
a = c.sort(key=lambda x: x[1])
print(a)  # 輸出 None

根本原因

list.sort() 是 原地排序,回傳值為 None,並不會回傳排序後的列表。變數 a 接收到的是 None,而原列表 c 已被排序。

正確寫法

方法一:分行執行

c.sort(key=lambda x: x[1])
print(c)  # 輸出已排序的列表

方法二:使用 sorted() 回傳新列表

a = sorted(c, key=lambda x: x[1])
print(a)  # 輸出新排序列表,c 保持原序

Python 2 與 3 差異提醒

  • Python 2:zip() 直接回傳列表,可直接 .sort()。
  • Python 3:zip() 回傳迭代器,必須先 list(zip(...)) 再排序。

最佳實踐

習慣使用 sorted() 產生新列表,避免副作用;若確定不需要原序列,再用 .sort() 節省記憶體。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved