簡體   English   中英

為什么list(set(a + b))返回有序列表? 並且它總是返回有序列表嗎?

[英]Why list(set(a+b)) returns ordered list? And is it always returns an ordered list?

我有兩個整數列表。 然后,我結合列表中的元素來創建沒有重復的新列表。 我希望對新列表進行排序。 但是當我嘗試結合使用set時,它將返回一個有序列表。 我想知道為什么返回有序列表? 而且它總是真實的嗎?

我嘗試過使用列表的不同值返回已排序的列表

a = [1,1,2,3,5,8,13,14,15,16]
b = [1,1,2,3,4,5,6,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

結果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

由於集合是無序的,因此將集合投射到列表后獲得的列表是不可能排序的。

來自文檔: https : //docs.python.org/3/tutorial/datastructures.html#sets

集合是沒有重復元素的無序集合。

這是一個非常簡單的示例, order失敗

a = [1,5]
b = [1,10,20]
c = list(set(a+b))
print(c)
#[1, 10, 20, 5]

要對組合列表進行排序 ,只需使用sorted

In [2]: a = [1,5]                                                                                                                             

In [3]: b = [1,10,20]                                                                                                                         

In [5]: c = list(set(a+b))                                                                                                                    

In [6]: sorted(c)                                                                                                                             
Out[6]: [1, 5, 10, 20]

Python中的集合未排序:

Python還包括集合的數據類型。 集合是沒有重復元素的無序集合。 基本用途包括成員資格測試和消除重復條目。 集合對象還支持數學運算,例如並集,交集,差和對稱差。

(資源)

這是示例:

a = list(reversed([1,1,2,3,5,4498576,8,13,14,15,16]))
b = [1,345,132,36465,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

打印:

[1, 2, 3, 132, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4498576, 36465, 345]

如果要對列表進行排序,則應手動進行:

c.sort()
print(c)

[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 132, 345, 36465, 4498576]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM