本文共 4207 字,大约阅读时间需要 14 分钟。
由于列表中存储的是可变化的数据类型,所以当我们把一个列表当作元素存入列表中时,列表的嵌套也就完成了。
a = ['上海', '北京', '深圳', '广东']b = ['乌海', '呼伦贝尔']a.append(b)print(a)输出结果:['上海', '北京', '深圳', '广东', ['乌海', '呼伦贝尔']]
当在使用列表嵌套时,只需要将嵌套的列表当作大列表中的一个元素进行操作即可。
所谓的列表推导式,就是指的轻量级循环创建列表。
# 生成一个0-9的列表# for循环写法num = []for i in range(0,10): num.append(i)print(num)# 列表推导式写法num2 = [j for j in range(0, 10)]print(num2)输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = 12b = ab = 13print(b)print(a)nums1 = [1, 5, 8, 9, 10, 12]nums2 = nums1nums2[0] = 100print(nums2)print(nums1)输出结果:1312[100, 5, 8, 9, 10, 12][100, 5, 8, 9, 10, 12]
在python中的赋值运算都是引用(即内存地址)。对于可变 类型而言,修改源数据的值,会改变赋值对象的值。
列表的copy函数
使用列表的copy函数,可直接将列表进行复制,编程一个全新的列表,这种赋值方法就式浅拷贝
nums1 = [1, 5, 8, 9, 10, 12]nums2 = nums1.copy() # 调用列表的copy方法,可以复制出一个新的列表nums2[0] = 100# 修改新列表里的数据,不会影响到原有列表里的数据print(nums2)print(nums1)输出结果:[100, 5, 8, 9, 10, 12][1, 5, 8, 9, 10, 12]
除了使用列表的copy函数外,Python还提供了copy模块来复制对象。copy模块提供了浅拷贝和深拷贝两种复制方法,虽然他们的使用方式相同,但在执行效果上又具有一定的差距。
浅拷贝
浅拷贝是对于对象的顶层拷贝,拷贝了对象的引用,而没有拷贝内容。
import copywords1 = ['hello', 'good', ['yes', 'ok'], 'bad']# 浅拷贝只会拷贝最外层的对象,里面的数据不会拷贝,而是直接指向words2 = copy.copy(words1)words2[0] = '你好'words2[2][0] = 'no'print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']# wrods2 里的 yes 被修改成了 noprint(words2) # ['你好', 'good', ['no', 'ok'], 'bad']输出结果:['hello', 'good', ['no', 'ok'], 'bad']['你好', 'good', ['no', 'ok'], 'bad']
可以看出来在对列表中的可变类型进行重新赋值时,源列表中的可变类型也发生了变化,而对于列表中的不可变量重新赋值时,源列表并未发生改变。
深拷贝
不同于浅拷贝,深拷贝是对于一个对象所有层次的递归拷贝。
import copywords1 = ['hello', 'good', ['yes', 'ok'], 'bad']# 深拷贝会将对象里的所有数据都进行拷贝words2 = copy.deepcopy(words1)words2[0] = '你好'words2[2][0] = 'no'print(words1) # ['hello', 'good', ['yes', 'ok'], 'bad']print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']输出结果:['hello', 'good', ['yes', 'ok'], 'bad']['你好', 'good', ['no', 'ok'], 'bad']
深拷贝完全形成两个列表。
切片
列表和字符串类似,也支持切片,而切片的本质也是浅拷贝。
python中元组和列表类似,但是元组的元素是不可进行修改的。
元组使用()
进行定义。
,
号 atuple = ('python','2109.56')btuple = ('java',)
元组中的元素是不可修改的,所以“增删改”在元组中并不存在。
虽然列表可以存储任意的数据类型,但是当存储的元素含义较为丰富,具有不同的意义时,列表就不能很好的体现数据间的差异了。
针对列表的劣势,字典可以很好的处理不同含义的数据间的存储。
在字典中,数据以**键值对(key:velue)**的形式进行存储,使用{}
进行定义。
person = { 'name': 'zhangsan', 'age': 18}
字典和列表一样可以存储多个数据
字典中的键值(key)
是唯一的,若出现多个key值
,后续出现的value
会覆盖掉之前key
对应的value
。
key:value
是一对多关系
键值(key)
可以使用数字、布尔、元组等不可变数据类型,但一般使用字符串。
字典可以通过键值(key)
进行查询相关联的值(value)
除了使用指定key值
进行数据查询外,get()
也是一种方法。
atuple = { 'name': 'lisa', 'age': 18}print(atuple['name'])print(atuple.get('name'))输出结果:lisalisa
注意:获取字典的默认值不会对字典内进行修改。
字典的遍历
key
(键)atuple = { 'name': 'linshiyu', 'age': 18}for key in atuple.keys(): print(key) 输出结果:nameage
value
值atuple = { 'name': 'linshiyu', 'age': 18}for value in atuple.values(): print(value) 输出结果:linshiyu18
atuple = { 'name': 'linshiyu', 'age': 18}for item in atuple.items(): print(item)输出结果:('name', 'linshiyu')('age', 18)
key:value
(键值对)atuple = { 'name': 'linshiyu', 'age': 18}for key,value in atuple.items(): print(f'key= {key}, value= {value}') 输出结果:key= name, value= linshiyukey= age, value= 18
代码格式:字典名['key'] = 'value'
当使用添加语句时,如果key值
在字典中不存在,那么字典会新增这个键值对
atuple = { 'name': 'linshiyu', 'age': 18}atuple['address'] = '上海'print(atuple)输出结果:{ 'name': 'linshiyu', 'age': 18, 'address': '上海'}
python提供了两种删除字典的方法
info = { 'name':'班长', 'id':100}print('删除前,%s' % info)del info['name'] # del 可以通过键删除字典里的指定元素print('删除后,%s' % info)输出结果:删除前,{ 'name': '班长', 'id': 100}删除后,{ 'id': 100}
info = { 'name':'monitor', 'id':100}print('清空前,%s'%info)info.clear()print('清空后,%s'%info)输出结果:清空前,{ 'name': 'monitor', 'id': 100}清空后,{ }
修改字典中的元素,就是修改字典中键值对key:velue
中的value值。
atuple = { 'name': 'linshiyu', 'age': 18}atuple['age'] = 25print(atuple)输出结果:{ 'name': 'linshiyu', 'age': 25}
集合(set)是一个无序的不重复元素的序列,可以使用{}
或set()
函数进行创建。
字典和集合都是用到{}
,但定义一个空集合时只能使用set()
;
{}
代表一个空字典
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
union | 返回两个集合的并集 |
update() | 给集合添加元素 |
转载地址:http://ukzhn.baihongyu.com/