簡體   English   中英

python中的集合元素必須是可變的還是不可變的?

[英]elements of sets in python must be mutable or immutable?

我正在閱讀python http://www.python-course.eu/sets_frozensets.php中的集合,並且混淆了python中的集合元素是否必須是可變的或不可變的? 因為在定義部分他們說“一個集合包含一個無序的獨特和不可變對象的集合。” 如果它是真的,那么集合如何包含列表是可變的?

有人可以澄清我的懷疑嗎?

>>> x = [x for x in range(0,10,2)]
>>> x
[0, 2, 4, 6, 8]      #This is a list x
>>> my_set = set(x)  #Here we are passing list x to create a set
>>> my_set
set([0, 8, 2, 4, 6])   #and here my_set is a set which contain the list.
>>> 

當你傳遞內置任何iterableset()構造函數時,它會構建一個迭代中提供的元素集。 因此,當您傳遞set()列表時,它會創建一個包含列表中對象的集合 - 而不是包含列表本身的集合,這是不允許的,因為列表是可變的。

所以重要的是列表中的對象是不可變的,在鏈接教程的情況下也是如此,因為你有一個(不可變的)字符串列表。

>>> set(["Perl", "Python", "Java"])
set[('Java', 'Python', 'Perl')]

請注意,此打印格式並不意味着您的集合包含列表,而是打印時表示集合的方式。 例如,我們可以從元組創建一個集合,它將以相同的方式打印。

>>> set((1,2,3))
set([1, 2, 3])

在Python 2中,集合打印為set([ comma-separated-elements ])

你似乎混淆初始化一個列表集:

a = set([1, 2])

將列表添加到現有集合:

a = set()
a.add([1, 2])

后者將拋出一個錯誤,前者使用您提供的列表中作為參數初始化集合。 什么是最有可能的混亂的原因是,當你打印a從第一個例子,它看起來像:

set([1, 2])

再次,但這里[1, 2]不是一個列表,只是表示a的方式:

a = set()
a.add(1)
a.add(2)
print(a)

得到:

set([1, 2])

沒有你指定一個列表。

暫無
暫無

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

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