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)

获取setlist 之间的交集。

【讨论】:

另外,集合只能包含可散列的对象;列表可以包含任何类型的对象。 @kindall -- 这在 #3 的解释中是隐含的,但我已将其添加为 #4 以使其更明确。感谢您的评论。【参考方案2】:

sets — 独特元素的无序集合

lists - 元素的有序集合

sets 允许您进行诸如intersectionuniondifferencesymmetric 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中的集合和列表有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

python中元组和列表有啥区别

python中的元组和列表有啥区别,哪个更有效[重复]

Python中列表和字典有啥区别,分别适用于啥

python中的list和list[:]有啥区别?

java中 List 与Set 有啥区别?

列表和字典有啥区别?