引言

Python中的一切都是一个对象。每个对象都有自己的数据属性和与之关联的方法。为了有效和恰当地使用一个对象,我们应该知道如何与它们进行交互。

列表、元组和集合是3种重要的对象类型。它们的共同点是,它们被用作数据结构。本文中,我们将看到这些结构如何收集和存储数据以及我们可以对它们进行的操作。并看到它们之间的异同。

让我们首先简要解释一下这些对象是什么。然后对每个示例进行详细说明。

· List 列表是Python中的内置数据结构。它表示为方括号中的数据点集合。列表可用于存储任何数据类型或不同数据类型的混合。列表是可变的,这也是它们被如此普遍使用的原因之一。

· Tuple 元组是用逗号分隔并用括号括起来的值的集合。与列表不同,元组是不可变的。不可变性可以被认为是元组的标识特性。

· Set 集合是不同的不可变对象的无序集合。一个集合包含唯一的元素。虽然集合是可变的,但集合的元素必须是不可变的。集合的元素没有顺序。因此,它不像我们对列表那样支持索引或切片。

python 列表做为整体 python把列表变成集合_编程语言

1. 列表vs集合

我们可以基于字符串中的字符创建列表或集合。要使用的函数是列表和集函数。

text = "Hello World!"
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 = "Hello World!"
list_a = list(text)
print(list_a[:2])
['H','e']
set_a = set(text)
print(set_a[:2])
TypeError: 'set' object is not subscriptable

在集合上进行切片或索引会引发 TypeError,因为这是一个与 set 对象类型的属性相关的问题。

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' object has no attribute 'append'

4. 元组--元素不可变

不可变性可能是元组最具标识性的特性。

tuple_a = (3, 5, 'x', 5)
tuple_a[0] = 7 #error

尽管元组是不可变的,但它们可以包含可变元素,如列表或集合。

tuple_a = ([1,3], 'a', 'b', 8)
tuple_a[0][0] = 99
print(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]

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一个不在集合中的项时,可以发现remove和discard之间的区别。Remove将引发一个错误,但discard则不会。

#remove
a = {1,2,3}
a.remove(5)
KeyError: 5
#discard
a = {1,2,3}
a.discard(5)
print(a)
{1,2,3}

8. Pop函数

Pop函数可以在列表和集合中使用,但是它在列表和集合中的工作方式不同。

默认情况下,pop函数从列表中删除最后一个项目并返回它。因此,我们可以将其分配给变量。我们可以将索引传递给pop函数,以删除特定索引处的元素。例如,pop(-2)将从末尾删除第二个项目。

list_a = ['a','b',3,6,4]
item = list_a.pop()
print(list_a)
['a', 'b', 3, 6]
print(item)
4

在集合上使用时,由于集合中没有索引或顺序,pop函数会删除任意项目。

set_a =  {'a','b',3, 6, 4}
item2 = set_a.pop()
print(set_a)
{4, 6, 'a', 'b'}
print(item2)
3

9. 添加新项目

由于元组是不可变的,我们只能向列表或集合中添加新项。append 方法在列表的末尾添加一个项。由于集合不具有顺序的概念,我们不能使用该方法。对于集合,add 方法用于添加新项。

a = [1,2,3]
a.append(4)
print(a)
[1,2,3,4]
b = {1,2,3}
b.add(4)
print(b)
{1,2,3,4}

10. Sort函数

由于集合没有顺序,因此无法应用sort函数。Sort函数会修改它所应用的对象,而元组是不可变的,因此我们只能在列表中使用该函数。

a = [3,1,5,2]
a.sort()
print(a)
[1, 2, 3, 5]

但是,我们可以对元组使用sorted函数。它创建任何可迭代的排序列表。因此,我们可以使用它来创建基于元组的排序列表。

b = (6,1,4,2)
print(sorted(b))
[1,2,4,6]

· Sort():对对象进行排序,但不返回任何内容

· Sorted():返回可迭代的项的排序列表,但不修改原始对象

总结

我们已经介绍了Python中三种基本数据结构之间的异同,并通过一些例子来加深理解。对数据结构的全面理解非常重要,因为它们是任何编程语言的基础部分。它们也是设计算法的关键因素。