快捷搜索:  汽车  科技

python基础彻底学会列表和元组(Python序列的元组字典)

python基础彻底学会列表和元组(Python序列的元组字典)通过下面的代码,我们可以看出元组和列表的区别:如果希望修改元组的元素,只能通过创建一个新的元组的方式来实现。所以,可以把元组理解为只读版的列表。o=(3 'abc' [1 2 3]) print(o[1]) o[1]=999 print(o) 运行结果: abc Traceback (most recent call last): File "F:\Python程序\元组,字典,集合示例.py" line 9 in <module> o[1]=999 TypeError: 'tuple' object does not support item assignment元组创建的方法一:#创建元组,如果只有一个元素,需要加上逗号 p=(3 ) q=(3) o=(3 'abc' [1 2 3]) pri

带你走进 @ 机器人时代

Discover 点击上面蓝色文字,关注我们

python基础彻底学会列表和元组(Python序列的元组字典)(1)


Python序列
除了列表外,还有元组、字典、集合等序列结构,他们各有不同的功能和应用,今天我们来看看。

元组相当于是不可变的列表,一旦创建就不能修改。

o=(3 'abc' [1 2 3]) print(o[1]) o[1]=999 print(o) 运行结果: abc Traceback (most recent call last): File "F:\Python程序\元组,字典,集合示例.py" line 9 in <module> o[1]=999 TypeError: 'tuple' object does not support item assignment

元组创建的方法一:

#创建元组,如果只有一个元素,需要加上逗号 p=(3 ) q=(3) o=(3 'abc' [1 2 3]) print(type(p)) print(type(q)) print(type(o)) 运行结果: <class 'tuple'> <class 'int'> <class 'tuple'>

元组创建的方法二:
使用tuple()函数创建或转换为元组:

#使用tuple()函数创建元组 p=tuple('ABC') print(type(p)) q=tuple([1 2 3 4 '5']) print(type(q) '\n' q) o=tuple(range(1 5)) print(type(q) '\n' o) 运行结果: <class 'tuple'> <class 'tuple'> (1 2 3 4 '5') <class 'tuple'> (1 2 3 4)


访问元组的方法和访问列表的方法大同小异,可以通过索引号、切片的方式访问。

如果希望修改元组的元素,只能通过创建一个新的元组的方式来实现。所以,可以把元组理解为只读版的列表。

通过下面的代码,我们可以看出元组和列表的区别:

#元组和列表的区别 #测试内存占用 p=[] print('列表的存储空间:' p.__sizeof__()) q=() print('元组的存储空间:' q.__sizeof__()) 运行结果: 列表的存储空间:40 元组的存储空间:24


字典:是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。如:{1:'abc' 2:'efg'}这种形式,1是键 abc是键值。

它主要有这些特征:键是唯一的,不能重复;键不可变,只能使用数字、字符串或者元组,不能使用列表;字典是可变的,可以任意嵌套;字典是任意数据的无序集合;通过键来读取数据,而不是通过索引。

我们来看看下面几种创建字典的方式:

#字典的创建 p={1:'abc' 2:'efg'} print(p type(p)) m=dict.fromkeys(['张三' '李世' '王五'] 60) print(m type(m)) n=dict(a='手机' b='电脑') print(n type(n)) d = (['two' 2] ['one' 1] ['three' 3]) a = dict(d) print(a type(a)) 运行结果: {1: 'abc' 2: 'efg'} <class 'dict'> {'张三': 60 '李世': 60 '王五': 60} <class 'dict'> {'a': '手机' 'b': '电脑'} <class 'dict'> {'two': 2 'one': 1 'three': 3} <class 'dict'>

访问字典的方式有两种:

#访问字典 p={'two': 99999 'one': 88888 'three': 3} print(p['one']) print(p.get('one')) 运行结果: 88888 88888

通过以下代码,我们看看对字典的增删改查的操作:

#访问字典 p={'two': 99999 'one': 88888 'three': 3} #增加一堆键及键值 p['three']=77777 print(p) #修改键及键值 p['three']=66666 print(p) #删除键及键值 del p['three'] print(p) #判断键是否存在 print('two' in p) print('four' in p) 运行结果: {'two': 99999 'one': 88888 'three': 77777} {'two': 99999 'one': 88888 'three': 66666} {'two': 99999 'one': 88888} True False

获取字典中特定的数据,我们还可以使用下列方法:
keys() 方法用于返回字典中的所有键(key);
values() 方法用于返回字典中所有键对应的值(value);
items() 用于返回字典中所有的键值对(key-value);

p={'two': 99999 'one': 88888 'three': 3} print(p.keys()) #取得键 print(p.values()) #取得键值 print(p.items()) #取得键值对 运行结果: dict_keys(['two' 'one' 'three']) dict_values([99999 88888 3]) dict_items([('two' 99999) ('one' 88888) ('three' 3)]) #注意返回值的类型

如果要操作这些返回值,需要转换为列表:

p={'two': 99999 'one': 88888 'three': 3} print(p.keys()) #取得键 #注意返回值的类型 s=list(p.keys()) print(s type(s)) 运行结果: dict_keys(['two' 'one' 'three']) ['two' 'one' 'three'] <class 'list'>

我们也可以使用循环来遍历字典:

p={'two': 99999 'one': 88888 'three': 3} for i j in p.items(): print(i j) 运行结果: two 99999 one 88888 three 3


copy()方法

#copy()方法 a = {'one': 1 'two': 2 'three': [1 2 3]} b = a.copy() #向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来 # 因此 a 添加新键值对,不会影响 b。 a['four']=100 print(a) print(b) #由于 b 和 a 共享[1 2 3](浅拷贝) # 因此移除 a 中列表中的元素,也会影响 b。 a['three'].remove(1) print(a) print(b) 运行结果: {'one': 1 'two': 2 'three': [1 2 3] 'four': 100} {'one': 1 'two': 2 'three': [1 2 3]} {'one': 1 'two': 2 'three': [2 3] 'four': 100} {'one': 1 'two': 2 'three': [2 3]}


update()方法

#update方法 a = {'one': 1 'two': 2 'three': 3} a.update({'one':9 'four': 12}) print(a) 运行结果: {'one': 9 'two': 2 'three': 3 'four': 12}


pop() 和 popitem() 方法:删除键值对

#pop() 和 popitem() 方法删除键值对 a = {'数学': 100 '语文': 99 '英语': 80} print(a) a.pop('语文') print(a) a.popitem() print(a) 运行结果: {'数学': 100 '语文': 99 '英语': 80} {'数学': 100 '英语': 80} {'数学': 100}

popitem() 总是弹出底层中的最后一个 key-value,这和列表的 pop() 方法类似。

setdefault() 方法用来返回某个 key 对应的 value;如果该 key 存在,那么直接返回该 key 对应的 value;
如果该 key 不存在,那么先为该 key 设置默认值,然后再返回该 key 对应的 默认值。

字典可以用来格式化字符串,我们来看看它的应用:

#使用字典格式化字符串 # 字符串模板中使用key t = '我们国家%(a1)s 有%(a2).0f年的历史,拥有人口:%(a3)s' c = {'a1':'自古以来' 'a2': 5000 'a3': '14亿'} # 使用字典为字符串模板中的key传入值 print(t % c) 运行结果: 我们国家自古以来 有5000年的历史,拥有人口:14亿


集合:与数学中的集合概念一样,用来保存不重复的元素,所有的元素都是唯一的。

同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型。

可以用{}和set()方法来创建集合,它最实用的特点就是用来过滤重复的数据。一般来说,由于集合是无序的,所有我们在访问集合的时候采用循环的方式来读取数据。

通过代码,我们可以看到集合操作的一些方法:

#集合的操作 p={1 2 3 4 6 7 7 8 9 9 0} #集合会自动删除重复的元素 print(p type(p)) #向集合中添加元素 p.add('ABC') print(p type(p)) #从集合中删除元素 p.remove(9) print(p type(p)) #使用discard()删除元素,失败不会报错 p.discard('ABD') print(p type(p)) q={3 4 5 999 'ABC' 'CD'} #集合的交集运算 print(p&q) #集合的并集运算 print(p|q) #集合的差集运算 # 取一个集合中另一集合没有的元素 print(p-q) #取集合 A 和 B 中不属于 A&B 的元素 print(p^q) 运行结果: {0 1 2 3 4 6 7 8 9} <class 'set'> {0 1 2 3 4 'ABC' 6 7 8 9} <class 'set'> {0 1 2 3 4 'ABC' 6 7 8} <class 'set'> {0 1 2 3 4 'ABC' 6 7 8} <class 'set'> {'ABC' 3 4} {0 1 2 3 4 'ABC' 6 7 8 5 999 'CD'} {0 1 2 6 7 8} {0 1 5 2 6 7 8 'CD' 999}


下面总结集合的一些方法:

方法名

语法格式

功能

add()

set1.add()

向 set1 集合中添加数字、字符串、元组或者布尔类型

clear()

set1.clear()

清空 set1 集合中所有元素

copy()

set2 = set1.copy()

拷贝 set1 集合给 set2

difference()

set3= set1.difference(set2)

将 set1 中有而 set2 没有的元素给 set3

difference_update()

set1.difference_update(set2)

从 set1 中删除与 set2 相同的元素

discard()

set1.discard(elem)

删除 set1 中的 elem 元素

intersection()

set3= set1.intersection(set2)

取 set1 和 set2 的交集给 set3

intersection_update()

set1.intersection_update(set2)

取 set1和 set2 的交集,并更新给 set1

isdisjoint()

set1.isdisjoint(set2)

判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True

issubset()

set1.issubset(set2)

判断 set1 是否是 set2 的子集

issuperset()

set1.issuperset(set2)

判断 set2 是否是 set1 的子集

pop()

a = set1.pop()

取 set1 中一个元素,并赋值给 a

remove()

set1.remove(elem)

移除 set1 中的 elem 元素

symmetric_difference()

set3= set1.symmetric_difference(set2)

取 set1 和 set2 中互不相同的元素,给 set3

symmetric_difference_update()

set1.symmetric_difference_update(set2)

取 set1 和 set2 中互不相同的元素,并更新给 set1

union()

set3 = set1.union(set2)

取 set1 和 set2 的并集,赋给 set3

update()

set1.update(elem)

添加列表或集合中的元素到 set1


在Python中还有一种frozenset 集合是不可变序列,程序不能改变序列中的元素。

# frozenset 集合 t = {'张三' '李四' '王五'} f = frozenset(['男' '女']) b = {'1班' '2班'} #向set集合中添加 t.add(f) print('t =' t) 运行结果: t = {frozenset({'男' '女'}) '李四' '王五' '张三'}

字典和集合是进行过性能高度优化的数据结构,特别是对于查找、添加和删除操作。

我们通过以下例子可以发现集合与列表在实际应用中的效率对比:

#初始化1万个产品的名称和价格 #分别用集合和列表来统计产品的价格数量 #计算耗时 #统计时间需要用到 time 模块中的函数 import time def find_11(pd): p_list = [] for _ price in pd: # A if price not in p_list: #B p_list.append(price) return len(p_list) id = [x for x in range(0 10000)] price = [x for x in range(20000 30000)] pd = list(zip(id price)) # 计算列表版本的时间 开始时间 = time.perf_counter() find_11(pd) 结束时间 = time.perf_counter() print("列表总共用时: {}".format(结束时间 - 开始时间)) #使用集合完成同样的工作 def find_s(pd): u_set = set() for _ price in pd: u_set.add(price) return len(u_set) # 计算集合版本的时间 开始时间1 = time.perf_counter() find_s(pd) 结束时间1 = time.perf_counter() print("集合总共用时: {}".format(结束时间1 - 开始时间1)) 运行结果: 列表总共用时: 0.47609080000074755 集合总共用时: 0.0010524000008445


可见,Python序列的类型,各有各的用处

坚持学习,每天都能进步一点点!!

往期回顾:

  • 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
  • RPA技术在旅行社销售业务中如何凤凰涅槃??
  • 【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!

本文引用和摘录相关内容,请联系侵删。

- END -

最后,文章有帮助到你的话【点赞在看
激励我们分享更多的干货!

猜您喜欢: