零基础小白 Python这样学就对啦!——05篇
一、数据类型 -- 元组(tuple)
1.1 元组是什么?
元组和列表相似,只是列表元素放在 [] 里面,元组的元素放在 () 里面。
L = [1, 2, 3, 4, 5]
print(L, type(L))
T = (1, 2, 3, 4, 5)
print(T, type(T))s = ""
l = []
t = ()
print(type(s), type(l), type(t))
print(len(s), len(l), len(t))
t1 = (1)
print(t1, type(t1))
# 输出结果:1 <class 'int'>
t2 = (1,)
print(t2, type(t2))
t3 = tuple()
print(t3, type(t3))
1.2 访问元组
元组的访问,和列表一样可以直接遍历元素,也可以通过索引/下标遍历。
1.2.1 遍历元组
t = (1, 2, 3, 'hqyj', [6, 7, 8])
for i in t: print(i)
for i in range(len(t)): print(t[i])
1.2.2 元组截取/切片
t = (1, 2, 3, 'hqyj', [6, 7, 8])
print(t[:])
print(t[::-1])
print(t[1:5:2])
1.3 修改元组【NO】
元组中的元素项是不允许修改的。
t = (1, 2, 3, 'hqyj', [6, 7, 8])
t[3] = 'xxxx'
print(t)
# TypeError: 'tuple' object does not support item assignment
# 类型错误:tuple 对象不支持项赋值
元组可以包含可变对象——列表,对列表项进行修改。
t = (1, 2, 3, 'hqyj', [6, 7, 8])
t[4][0] = 666
print(t)
# 元组对象不支持项赋值
# 但是元组可以包含可变对象——列表
# 然后对列表项进行赋值修改
1.4 删除元组【NO】
不可以删除元组元素,可以删除整个元素
t = (1, 2, 3, 'hqyj', [6, 7, 8])
# del t[0]
del t
1.5 元组的运算
因为元组是不可变的,所以元组的运算较为简单,有如下。
t1 = (11, 2, 13, 4)
t2 = (6, 12, 88, 10)
print(t1+t2)
print(t1*2)
print(len(t1), len(t2))
print(max(t1), min(t2))
print(sum(t1), sum(t2))
print(t1.index(13))
print(t2.count(10))
1.6 关于元组是不可变的
可读不可写
二、数据类型 -- 集合(set)【用的不多,了解即可】
2.1 集合是什么?
集合是一个无序的[没有下标索引的] 不重复的[去重] 序列,所有元素放在 {} 里面,中间以逗号隔开。
有序序列:有下标索引,字符串、列表、元组
无序序列:集合、字典
s = ""
l = []
t = ()
set1 = set() # 因为字典也用{}括起来,所以不能用{}创建空集合,必须使用内置函数set()
print(type(s), type(l), type(t), type(set1)) # 创建一个只包含一个元素的集合
set2 = {1} print(type(set2))
集合支持集合推导式(Set comprehension):
具体可看下方链接:
Python高级语法:推导式-CSDN博客
使用推导式,创建一个包含100以内能被3和5整除的数的集合 使用推导式,
创建一个集合,元素在'welcome to hqyj'中但不在'hello'中 set1 = {i for i in range(100) if i%3==0 and i%5==0}
print(set1)
set2 = {i for i in 'welcome to hqyj' if i not in 'hello'}
print(set2)
# 集合有去重性
set3 = {i for i in 'aaaaaaa'}
print(set3)
2.2 添加元素
- 将元素 x 添加到集合 set 中,如果元素已存在,则不进行任何操作,语法格式如下:set.add(x)
- 还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:set.update(x) x 可以有多个,用逗号分开。
set1 = {1, 2, 3, 4, 5}
set1.add(3)
print(set1)
set1.add(66)
print(set1)
set1.update((77,88,99))
print(set1)
set1.update("hqyj666")
print(set1)
2.3 移除元素
- 将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误,语法格式如下:set.remove(x)
- 移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:set.discard(x)
- 我们也可以设置随机删除集合中的一个元素,语法格式如下:set.pop()
- 我们也可以使用clear()清空集合元素
set1 = {'3zhangsan', '5lisi', '2wangwu', '4xiaohua'}
set1.remove('5lisi')
print(set1)
set1.discard('haqyj')
print(set1)
set1.pop()
print(set1)
set1.clear()
print(set1)
set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面边第一个元素进行删除。
2.4 集合的数学运算
a = {1, 2, 3, 4, 5} b = {3, 4, 5, 6, 7}
print("a与b的交集", a & b)
print("a与b的并集", a | b)
print("a与b的异或集", a ^ b)
print("a与b的差集", a - b, b - a)
s1 = {1, 2, 3}
s2 = {1, 2, 3, 4, 5} print("s1是s2的子集吗?", s1 <= s2)
print("s1是s2的真子集吗?", s1 < s2)
小练
分别有两个集合 st1 = {1,2,1,3,4,5,6,7} st2 ={2,5,6,9,5,8,75} ,要求:
1. 求出他们之间的交集
2. 求出他们之间的并集
3. 求出他们之间的差集(分别求出st1-st2 和 st2-st1)
4. 求出他们之间的异或集
2.5 集合内置方法【了解即可】
方法 | 描述 |
add() | 为集合添加元素 |
clear() | 清空 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集。 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
2.6 练习题
(1) 部门员工统计: 经理有:曹操,刘备,孙权 技术员:曹操,孙权,张飞,关羽 用集合完成以下要求:
1.既是经理也是技术员的有谁?
2.是技术员但不是经理的人有谁?
3.张飞是经理吗?
4.身兼一职的人有谁?
(2)IEEE 和 TIOBE 是两大热门编程语言排行榜。截至 2018 年 12 月, IEEE榜排名前五的语言是:Python、C++、C、Java 和 C#。 TIOBE榜排名前五的语 言分别是:Java、C、Python、C++和 VB.NET。 请编程:
1、上榜的所有语言
2、两个榜单中同时出现的语言
3、只在 IEEE 榜中前五的语言
4、只在一个榜中出现的语言
(3) 生成了 N 个 1~100 之间的随机整数(N<=1000),N 是用户输入的; 对于其中重复的数字,只保留一个,把其余相同的数字去掉;
三、数据类型 -- 字典(dictionary)
3.1 字典是什么?
数据元素是键值对【键和值用冒号相连】,多个键值对元素放在 {} 里面,中间以 逗号 隔开。
注意:
- 键是唯一的,若有多个,只保留最后一次赋值的结果。
- 键还必须是不可变数据类型——字符串、数值、元组。
3.2 创建字典
str1 = ""
list1 = []
tuple1 = ()
set1 = set()
dict1 = {}
print(type(str1), type(list1), type(tuple1), type(set1), type(dict1))d1 = {'name':'张三', 'age':18, 'sex':'男'}
print(d1)
d2 = dict(zhangsan=18, lisi=20, wangwu=19)
print(d2)
d3 = dict([('zhangsan',18), ('lisi',20), ('wangwu',19)])
print(d3)
name = ['张三', '李四', '王五']
d4 = dict.fromkeys(name, 18)
print(d4)
3.3 访问、遍历字典
字典是无序序列,没有下标索引。但是可以把相应的键放入到方括号中,通过键去访问值,就像我们查字典是一样的,键就是那个‘人字旁’, 通过'人字旁'的索引查到所有的值。
dict1 = {'人字旁':['你', '他', '们'], '木字旁':['树', '林', '村']}
print(dict1)
print(dict1['木字旁'])
# print(dict1['走之旁'])
# KeyError: '走之旁'遍历字典的键、值、键值对dict1 = {'人字旁':['你', '他', '们'], '木字旁':['树', '林', '村']}
# for i in dict1:
# print(i)
# for i in dict1:
# print(dict1[i]) for i in dict1.keys(): print(i)
for i in dict1.values(): print(i)
for i in dict1.items(): print(i)
3.4 修改字典
通过键的索引,赋值修改值即可。键存在,就修改;键不存在,就添加在末尾。
d1 = {'name':'张三', 'age':18, 'sex':'男'}
# 存在键,修改
d1['age'] = 20 print(d1)
# 不存在键,添加
d1['score'] = 100 print(d1)
'''
字符串 s[0] = '66'
报错——不可变
列表中 l[0] = 66
元组中 t[0] = 66
报错——不可变
集合中 st[0] = 66
报错——无序序列,无下标
字典中 d['age'] = 20
'''
3.5 删除字典元素
在Python中,你可以通过多种方式来删除字典(dict
)中的元素。以下是几种常见的方法:
1. 使用 del 语句#del 语句可以用来删除字典中的某个键值对。my_dict = {'a': 1, 'b': 2, 'c': 3}
del my_dict['b'] # 删除键 'b' 及其对应的值
print(my_dict) # 输出: {'a': 1, 'c': 3}2. 使用 pop() 方法#pop() 方法也可以删除字典中的某个键值对,并且会返回被删除的值。如果尝试删除的键不存在,可以提#供一个默认值来避免抛出 KeyError。my_dict = {'a': 1, 'b': 2, 'c': 3}
value = my_dict.pop('b') # 删除键 'b' 并返回其值
print(value) # 输出: 2
print(my_dict) # 输出: {'a': 1, 'c': 3}# 如果键不存在,可以提供一个默认值
value = my_dict.pop('d', 'Not Found') # 尝试删除不存在的键 'd'
print(value) # 输出: Not Found3. 使用字典推导式(字典解析)#虽然字典推导式本身不是用来删除元素的,但你可以用它来创建一个不包含要删除元素的新字典。my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_to_remove = ['b'] # 要删除的键的列表# 使用字典推导式创建新字典,排除要删除的键
new_dict = {k: v for k, v in my_dict.items() if k not in keys_to_remove}
print(new_dict) # 输出: {'a': 1, 'c': 3}4. 清除整个字典#如果你想要清除字典中的所有元素,可以使用 clear() 方法。my_dict = {'a': 1, 'b': 2, 'c': 3}
my_dict.clear() # 清除所有元素
print(my_dict) # 输出: {}
3.6 字典键的特性
在Python中,字典(dict
)的键具有一些独特的特性和要求:
-
唯一性:
字典中的键必须是唯一的。这意味着你不能有两个键具有相同的值。如果尝试添加一个已经存在的键,其对应的值将被新值覆盖。 -
不可变性:
字典的键必须是不可变的类型。这通常意味着键可以是数字(整数和浮点数,但通常用作键的是整数)、字符串或元组。列表、集合和其他可变类型不能用作字典的键,因为它们的值可以在不创建新对象的情况下被改变,这可能会破坏字典的内部结构。 -
哈希性:
为了有效地在字典中查找、插入和删除键值对,键需要支持哈希操作。这意味着键需要有一个哈希值,这个哈希值在键的生命周期内应该是稳定的(即,只要键的内容不变,其哈希值也不应该改变)。所有不可变类型在Python中都支持哈希操作,因此它们可以用作字典的键。 -
无顺序:
在Python 3.6及更高版本中,字典保留了插入顺序作为实现细节,但这并不意味着你应该依赖这种顺序。在Python 3.7及更高版本中,这种顺序保证成为了语言规范的一部分。然而,即使如此,字典仍然被视为无序的数据结构,除非你明确地使用collections.OrderedDict
来保持元素的插入顺序。
3.7 字典内置函数&方法
函数 | 描述 |
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
key in dict | 如果键在字典dict里返回true,否则返回false |
dict.items() | 以列表返回一个视图对象 |
dict.keys() | 返回一个视图对象 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
dict.values() | 返回一个视图对象 |
pop(key[,default]) | 删除字典 key(键)所对应的值,返回被删除的值。 |
popitem() | 返回并删除字典中的最后一对键和值。 |