列表的加深了解
1 列表推导式
列表推导式:轻量级循环创建列表Pythonic
创建1-20之间所有偶数的列表
1.1 直接进行列表书写
list = [2,4,6,8,10,12,14,16,18,20]
print(list)
1.2 range()
ret = range(2,21,2)
print('range:',list(ret))
或
list = []
for i in range(2,21):
if i%2==0:
list.append(i)
print(list)
其中range()遵循左闭右开原则。
1.3 列表推导式
list = [i for i in range(1,21) if i%2==0]
print(list)
1、先迭代的是:range(1,21)
2、判断 i%2==0
3、符合条件的放入列表
2 列表的相关技巧
2.1 列表的合并操作
列表的合并操作,列表中可以出现重复元素
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5]
print('list1:', list1)
print('list2:', list2)
list3 = list1+list2
print('list3:',list3)
list1.extend(list2)
print(list1)
2.2 列表转字符串
列表转字符串,注意:列表里面的元素,必须是字符串类型
list1 = [1, 2, 3, 4, 5]
list4 = ['1','2','3']
str1 = ''.join(list4)
print(str1)
str2 = ''.join([str(i) for i in list1])
print(str2)
注意点:列表里面进行转字符串的过程中,列表元素必须是字符串类型,如果是其他类型的列表,需要将每一个元素转成字符串,最后用join()这个方法转成字符串,有返回值。
3 内置函数(例子)
3.1 isinstance()
内置函数isinstance() ,判断数据类型
列表可以嵌套列表
list3 = [1,2,3,[1,2,3],4,5,7,[6,7,8]]
for i in list3:
if isinstance(i,list):
for j in i:
print(j)
else:
print(i)
3.2 zip()
zip()将相同下标的内容打包成元组
list4 = ['aa','bb','cc']
list5 = [12,13,14]
ret = zip(list4,list5)
print(ret)
for i in ret:
print(i)
3.3 enumerate()
enumerate()可将函数返回成一个对象,可以用for循环进行遍历获取
list4 = ['aa','bb','cc']
ret = enumerate(list4)
print(ret)
for i in ret:
print(i)
4 列表的拷贝
4.1 引用
如果是引用的拷贝操作,无论哪个列表做操作,都会影响到其他的引用列表,id是相同的,操作也是同步的
list1 = [1,2,3,['a','b','c'],'abc']
print('list1:',list1,id(list1))
print('#####################')
list2 = list1
print('list2:',list2,id(list2))
print('#####################')
list1.append('xyz')
print('修改后list1:',list1)
print('未修改的list2:',list2)
list2.append('jjj')
print('修改后list2:',list2)
print('未修改的list1:',list1)
4.2 浅拷贝
浅拷贝 注意:id()地址是不一样的,但是列表里面的子对象是同一个
list1 = [1,2,3,['a','b','c'],'abc']
print('list1:',list1,id(list1))
print('#####################')
list3 = list1.copy()
print('list3:',list3,id(list3))
list3.append('hello')
print('修改后的list3:',list3)
print('未作修改的list1:',list1)
print('#####################')
list3[3]='xxx'print('修改后的list3:',list3)
print('未作修改的list1:',list1)
4.3 深拷贝
深拷贝之后id是不相同的,深拷贝会创建一个和原来列表完全没有关系的列表,他们的列表对象和子对象都是不同的,他们的操作也是不同的,是完全独立的。
import copy
list1 = [1,2,3,['a','b','c'],'abc']
print('list1:',list1,id(list1))
print('#####################')
list2 = copy.deepcopy(list1)
print('深拷贝列表:',list2,id(list2))
list2[3].append('hello')
print('修改后的深拷贝',list2)
print('未作修改的list1',list1)