Python:列表、元组、集合、字典,数据类型之间的 5 个差异

Python:列表、元组、集合、字典,数据类型之间的 5 个差异

这篇博客将介绍列表、元组、集合、字典(lists, tuples, sets, and dictionaries)数据类型的5个差异;包括:order排序、index索引、 Mutability可变性、Duplicates Allowed允许重复、Types Allowed 允许的类型

1. 相同点

  • 都可以存储多个值,唯一差别是括起来的特殊符号

2. 不同点

五个关键差异使每种数据类型都以某种方式有所帮助。差异基于:-order排序、index索引、 Mutability可变性、Duplicates Allowed允许重复、Types Allowed 允许的类型。

2.1 排序

列表、元组和字典是有序的。 set是无序的。 注意:Python 3.7 之前的字典是无序的。

2.2 索引

从一组元素中访问单个元素称为索引。可以使用方括号并在其中提及索引值(从 0 开始)来完成索引。索引指定数据类型是否可以索引。

列表和元组可以建立索引。 set无法建立索引。 字典的键类似于索引。

2.3 可变性

可变性指定数据类型的值最初是否可以修改。它将数据类型分为可变和不可变。

列表、set和字典是可变的并且可以修改。元组是不可变的并且不能被修改。
注意:set值不能修改。但可以添加或删除值。由于同一内存位置发生更改,它仍然被认为是可变的。
字典的值是可变的,key是不可变的,但可以增加删除key;

2.5 允许的类型

某些数据类型允许可变值和不可变值,但某些类型仅允许其中的不可变值。数据类型可以基于此进行分类。

2.4 允许重复

另一个关键区别是检查类型是否允许重复其元素。

列表和元组允许重复值。 set不允许重复值。如果尝试输入重复项,它将只接受一个值并忽略重复项。
字典允许在其值中出现重复项,但不允许在其键中出现重复项。键必须是唯一的。
列表和元组允许可变和不可变值。 set只允许不可变的值。一个set甚至不能包含另一个set。
字典只允许键中存在不可变类型。字典值可以是可变的和不可变的。

源码

# lists, tuples, sets, and dictionaries差别
# python python_collections.py

# 1. 都可以存储多个值,唯一差别是括起来的特殊符号
# 2. 主要差异 五个关键差异使每种数据类型都以某种方式有所帮助。差异基于:-order排序、index索引、 Mutability可变性、Duplicates Allowed允许重复、Types Allowed 允许的类型。

def printA(li, tp, st, di):
    print(li)
    print(tp)
    print(st)
    print(di)
    print()


li = [1, 2, 3, 4]  # Lists use []
tp = (1, 2, 3, 4)  # Tuples use ()
st = {
    
    1, 2, 3, 4}  # Sets use {}
di = {
    
    1: 10, 2: 20}  # Dictionaries use {} but contain key:value pairs
printA(li, tp, st, di)

## 2.1 排序:列表、元组和字典是有序的。 set是无序的。 注意:Python 3.7 之前的字典是无序的。
li = ['A', 'B', 'C']
tp = ('A', 'B', 'C')
st = {
    
    'A', 'B', 'C'}
di = {
    
    'A': 10, 'B': 20, 'C': 30}
printA(li, tp, st, di)

## 2.2 索引:从一组元素中访问单个元素称为索引。可以使用方括号并在其中提及索引值(从 0 开始)来完成索引。索引指定数据类型是否可以索引。列表和元组可以建立索引。 set无法建立索引。 字典可以设置键,因为它们有键和值。但它类似于索引。
li = ['A', 'B', 'C']
tp = ('A', 'B', 'C')
di = {
    
    'A': 10, 'B': 20, 'C': 30}

print(li[0])
print(tp[1])
print(di['C'])

## 2.3 可变性 可变性指定数据类型的值最初是否可以修改。它将数据类型分为可变和不可变。 列表、set和字典是可变的并且可以修改。元组是不可变的并且不能被修改。 注意:set值不能修改。但可以添加或删除值。由于同一内存位置发生更改,它仍然被认为是可变的。
# 可变类型
li = ['A', 'B', 'C']
li[0] = 'D'

print(li)

# 不可变类型
tp = ('A', 'B', 'C')
# tp[0] = 'D'
# TypeError: 'tuple' object does not support item assignment

## 2.4 允许重复 另一个关键区别是检查类型是否允许重复其元素。 列表和元组允许重复值。 set不允许重复值。如果您尝试输入重复项,它将只接受一个值并忽略重复项。 字典允许在其值中出现重复项,但不允许在其键中出现重复项。键必须是唯一的。
li = ['A', 'B', 'C', 'A']
tp = ('A', 'B', 'C', 'A')
st = {
    
    'A', 'B', 'C', 'A'}
di = {
    
    'A': 10, 'B': 20, 'C': 10}

printA(li, tp, st, di)

# 使用相同的key取最后一个设置的值
di = {
    
    'A': 10, 'B': 20, 'A': 20}
print(di)

## 2.5 允许的类型 某些数据类型允许可变值和不可变值,但某些类型仅允许其中的不可变值。数据类型可以基于此进行分类。
# 列表和元组允许可变和不可变值。 set只允许不可变的值。这意味着由于其可变性,一个set甚至不能包含另一个set。字典只允许键中存在不可变类型。字典值可以是可变的和不可变的。
li = [(30, 40), [10, 20]]
tp = ((30, 40), [10, 20])

print(li)
print(tp)

# set不可变,但可以插入/移除元素;
# 该错误表明set不可散列unhashable。所有不可散列类型都是可变的,所有可散列类型都是不可变的。
# st = {10, 20, {30, 40}}
# print(st)
# TypeError: unhashable type: 'set'

# Dict同理,值可变,key不可变;
# di = {'A': [10], [2]: 'B'}
# print(di)
# TypeError: unhashable type: 'list'

猜你喜欢

转载自blog.csdn.net/qq_40985985/article/details/132186834