【Python入门基础】常用数据结构(二)——元组,集合及字典

2020-11-11 10:53发布

数据结构

列表

元组

      元组是可以用一个变量()对象存储多个数据的容器数据类型,特殊之处在于元组的元素不能修改。事实上在项目中尤其是多线程环境中可能更喜欢使用的是那些不变对象,一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单地说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,如果一个方法要返回多个值,使用元组也是不错的选择。

      元组在创建时间和占用的空间上都优于列表。可以使用sys模块的getsizeof函数来检查存储同样的元素的元组和列表各自占有了多少内存空间,可以在ipython中使用魔法指令%timeit来分析创建同样的内容的元组和列表所花费的时间。

# 定义元组
t = ('Python', 1991, 'Guido van Rossum', '荷兰')
print(t)
# 获取元组中的元素
print(t[0])
print(t[3])
# 遍历元组中的值
for member in t:
    print(member)
# 重新给元组赋值
# t[0] = 'Tom'  # TypeError
# 变量t重新引用了新的元组原来的元组将被垃圾回收
t = ('C++', 1983, 'bell实验室', '英国')
print(t)
# 将元组转换成列表
person = list(t)
print(person)
# 列表是可以修改它的元素的
person[0] = 'Philly'
person[1] = 2020
print(person)
# 将列表转换成元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tupl

集合

      Python中的集合跟数学上的集合一致,不允许有重复的元素,而且可以进行交集、并集、差集等运算。

eg.创建集合(字面量语法、构造器语法和推导式语法)

# 创建集合的字面量语法
set1 = {1, 2, 3, 3, 3, 2}
print(set1)
print('Length =', len(set1))
# 创建集合的构造器语法(面向对象部分会进行详细讲解)
set2 = set(range(1, 10))
set3 = set((1, 2, 3, 3, 2, 1))
print(set2, set3)
# 创建集合的推导式语法(推导式也可以用于推导集合)
set4 = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}
print(set4)

eg.向集合添加元素和删除元素

set1.add(4)
set1.add(5)
set2.update([11, 12])
set2.discard(5)
if 4 in set2:
    set2.remove(4)
print(set1, set2)
print(set3.pop())
print(set3)

eg.集合成员、交集、并集、差集等运算

# 集合的交集、并集、差集、对称差运算
print(set1 & set2)
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))

字典

      字典是另一种可变容器模型,Python中的字典跟我们生活中的字典是一样的,它可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。

# 创建字典的字面量语法
values = {'鲜猪肉': 33, '鸡蛋': 3.15, '豌豆': 6.8}
print(values)
# 创建字典的构造器语法
items1 = dict(one=1, two=2, three=3, four=4)
# 通过zip函数将两个序列压成字典
items2 = dict(zip(['a', 'b', 'c'], '123'))
# 创建字典的推导式语法
items3 = {num: num ** 2 for num in range(1, 10)}
print(items1, items2, items3)
# 通过键可以获取字典中对应的值
print(values['鲜猪肉'])
print(values['豌豆'])
# 对字典中所有键值对进行遍历
for key in values:
    print(f'{key}: {values[key]}')
# 更新字典中的元素
values['鸡蛋'] = 3.2
values['西红柿'] = 4.6
values.update(火龙果=7.5, 丝瓜=5.5)
print(values)
if '大葱' in values:
    print(values['大葱'])
print(values.get('大葱'))
# get方法也是通过键获取对应的值但是可以设置默认值
print(values.get('大葱', 1.3))
# 删除字典中的元素
print(values.popitem())
print(values.popitem())
print(values.pop('鲜猪肉', 34))
# 清空字典
scores.clear()
print(values)


作者:ZoomToday

链接:https://blog.csdn.net/qq_36477513/article/details/104711876

来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。