Python中的集合和列表有啥区别?
Posted
技术标签:
【中文标题】Python中的集合和列表有啥区别?【英文标题】:What is the difference between sets and lists in Python?Python中的集合和列表有什么区别? 【发布时间】:2012-09-03 11:40:34 【问题描述】:Python 中集合和列表之间的唯一区别是您可以使用并集、相交、差分、对称差分函数来比较两个集合吗?为什么这些函数不能简单地应用于列表?在什么情况下集合比列表更有用?
【问题讨论】:
集合,根据定义,不包含重复值;我假设 Python 和其他语言一样,允许列表中有重复条目。 这在文档中有很好的说明。 Sets 和 Lists 【参考方案1】:差别很大。
-
集合不能包含重复项
集合是无序的
为了在集合中查找元素,使用哈希查找(这就是集合无序的原因)。这使得
__contains__
(in
运算符)对于集合比列表更有效。
集合只能包含可散列项(参见#3)。如果你尝试:set(([1],[2]))
,你会得到一个TypeError
。
在实际应用中,列表非常适合排序和排序,而集合则适合在您不希望重复且不关心顺序时使用。
还要注意,如果你不关心订单等,可以使用
new_set = myset.intersection(mylist)
获取set
和list
之间的交集。
【讨论】:
另外,集合只能包含可散列的对象;列表可以包含任何类型的对象。 @kindall -- 这在 #3 的解释中是隐含的,但我已将其添加为 #4 以使其更明确。感谢您的评论。【参考方案2】:sets
— 独特元素的无序集合
lists
- 元素的有序集合
sets
允许您进行诸如intersection
、union
、difference
和symmetric difference
之类的运算,即数学集合论的运算。 Sets 不允许索引并在哈希表上实现。
lists
是真正的可变长度数组,而不是 Lisp 样式的链表。在列表中,元素通过索引访问。
【讨论】:
【参考方案3】:还有一些不同之处:
-
列表可以是二维的,而集合不能。
由于列表是有序的(即有序列号),列表的执行速度相对较慢,而集合的执行速度较快。
python 中的列表类似于 java 或 c 的数组。
打印一组几乎总是提供不同的输出顺序。
Set 使用
hash function
查找元素,而list 是一个数组。因此在Set
中查找元素比在list
中查找元素要快。
【讨论】:
只要你使用frozenset
,一个集合可以是任意多的维度【参考方案4】:
Set 表示不同元素的集合。在 python 中,使用集合主要有两个原因(书籍:Data Science from Scratch,Joel Gruce):
为了更快的操作:in 是一个非常快速的集合操作。如果我们有大量元素并且希望执行成员资格测试,那么在这种情况下使用集合而不是列表是合适的。
在集合中查找不同的项目。程序员使用集合的频率远低于字典和列表。
【讨论】:
【参考方案5】:设置
集合是无序和无索引的集合,并且不允许重复。在 Python 中,集合是用大括号编写的。
# example set
newset = "one", "two", "three"
您不能通过引用索引来访问集合中的项目
集合是可变的
它们对于检查重复项很有用
列表
列表是有序且可变的集合。在 Python 中,列表是用方括号编写的。
# example list
newlist =["one", "two", "three"]
您可以通过引用索引号访问列表项
列表是可变的。
【讨论】:
我猜,OP 要求提供一些更高级的细节。【参考方案6】:集合和列表的区别 在这里,我们将讨论 Python 中 Sets 和 List 之间的区别。
列表 1) 列表按插入的顺序保存元素。 2) 列表支持索引。 3)我们可以改变存储在列表中的元素的值。 4) 列表可以存储重复值。 5) 列表使用方括号声明。 6) 示例:A = [1, 2, 3, 4, 5, 1, 2, 3]
套装 1) 集合不按插入顺序保存元素。 2) 集合不支持索引。 3)我们不能改变存储在集合中的元素的值。 4) 集合不能存储重复值。 5) 使用大括号声明集合。 6) 示例:A = 1, 2, 3, 4, 5
通过下面给出的链接了解更多关于 Sets with Example 的信息 https://tutorialsimpact.com/python/sets-in-python
【讨论】:
【参考方案7】:在python中其实有四种集合数据类型:
List 是一个有序且可变的集合。允许重复成员。
Tuple 是一个有序且不可更改的集合。允许重复成员。
Set 是一个无序且无索引的集合。没有重复的成员。
字典是一个无序、可变和索引的集合。没有重复的成员。
您可以通过引用其索引来访问 列表 项。但是,在 sets 中,您需要遍历 set 项目才能访问它。
来源:https://www.w3schools.com/python/python_sets.asp
【讨论】:
有一个有用的有序字典。以上是关于Python中的集合和列表有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章