Python中的一切都是对象。每个对象都有自己的数据属性和与之关联的方法。为了有效和恰当地使用一个对象,我们应该知道如何与它们交互。
列表、元组和集合是三种重要的对象类型。它们的共同点是它们都被用作数据结构。为了创建健壮且性能良好的产品,必须非常了解编程语言的数据结构。
在这篇文章中,我们将看到这些结构如何收集和存储数据,以及我们可以对它们进行的操作。我们将看到它们之间的异同。
让我们先简要解释一下这些对象是什么。然后我们将对每个例子进行详细说明。
- List是Python中的一个内置数据结构。它用方括号中的数据点集合表示。列表可用于存储任何数据类型或不同的数据类型。列表是可变的,这也是它们如此常用的原因之一。
- 元组是用逗号分隔并用括号括起来的值的集合。与列表不同,元组是不可变的。不变性可以看作元组的识别特征。
- Set是不同的不可变对象的无序集合。集合包含唯一的元素。虽然集合是可变的,但是集合的元素必须是不可变的。没有与集合的元素相关联的顺序。因此,它不像列表那样支持索引或切片。
我们现在对这些容器有了基本的了解。下面的示例将介绍如何与这些对象交互。
1.列表与集合
我们可以根据字符串中的字符创建列表或集合。要使用的函数是list和set函数。
text="HelloWorld!"print(list(text))['H','e','l','l','o','','W','o','r','l','d','!']print(set(text)){'H','W','o','','l','r','!','e','d'}
结果列表和集合对象的区别:
- 列表包含所有字符,而集合只包含唯一字符。
- 列表是根据字符串中字符的顺序排序的。集合的元素并没有顺序。
2.列表与集合索引
在前面的例子中,我们看到集合不具有顺序。因此,我们不能像处理列表那样对集合进行切片或索引。
text="HelloWorld!"list_a=list(text)print(list_a[:2])['H','e']set_a=set(text)print(set_a[:2])TypeError:'set'objectisnotsubscriptable
对集合进行切片或索引会引发类型错误,因为这是与集合对象类型的属性相关的问题。
3.列表与元组
列表和元组的区别在于易变性。与列表不同,元组是不可变的。例如,我们可以向列表添加项,但元组不行。
list_a=[1,2,3,4]list_a.append(5)print(list_a)[1,2,3,4,5]tuple_a=(1,2,3,4)tuple_a.append(5)AttributeError:'tuple'objecthasnoattribute'append'
更改集合的函数(例如append、remove、extend、pop)不适用于元组。
4.元组中的可变元素
不变性可能是元组最具识别性的特征。元组确定后不能改变。
tuple_a=(3,5,'x',5)tuple_a[0]=7#错误
虽然元组是不可变的,但是它们可以包含可变的元素,比如列表或集合。
tuple_a=([1,3],'a','b',8)tuple_a[0][0]=99print(tuple_a)([99,3],'a','b',8)
5.Del函数
Del函数代表delete,因此它用于从集合中删除项。它接受要删除的项的索引。
由于集合是无序的,因此它们中没有项的索引。因此,del函数不能用于集合。
list_a=[1,2,3,4]del(list_a[0])print(list_a)[2,3,4]
注意:有两种方法可以索引列表:
- 自始至终:0,1,2,3
- 从尾到头:-1,-2,-3
6.Remove函数
与del函数不同,remove函数可用于列表和集合。我们传递要删除的项而不是其索引。
list_a=['a','b',3,6]list_a.remove('a')print(list_a)['b',3,6]set_a={'a','b',3,6}set_a.remove('a')print(set_a){3,6,'b'}
7.Discard函数
Discard也可用于从集合中移除项。但是列表没有discard属性。
当我们试图删除一个不在集合中的项目时,我们会观察到“remove”和“Discard”之间的区别。Remove将引发一个错误,但discard不会发生任何操作。
#remove