Python3学习之路~2.1 列表、元组操作
列表
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
定义列表(list)
names=['Amy','Bob','Cindy','David']
通过下标访问列表中的元素,下标从0开始计数,还可以倒着取
>>> names[0] 'Amy' >>> names[1] 'Bob' >>> names[-1] 'David' >>> names[-2] 'Cindy'
切片:取多个元素
>>> names=['Amy','Bob','Cindy','David','Eric','Frank'] >>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4 ['Bob', 'Cindy', 'David'] >>> names[1:-1] #取下标1至-1(最后一个)的值,不包括-1 ['Bob', 'Cindy', 'David', 'Eric'] >>> names[0:3] ['Amy', 'Bob', 'Cindy'] >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样 ['Amy', 'Bob', 'Cindy'] >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写 ['David', 'Eric', 'Frank'] >>> names[3:-1] #这样-1就不会被包含了 ['David', 'Eric'] >>> names[0::2] #后面的2代表每隔一个元素就取一个 ['Amy', 'Cindy', 'Eric'] >>> names[::2] #0可以忽略,和上句效果一样 ['Amy', 'Cindy', 'Eric']
追加
>>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank'] >>> names.append("Serena") #追加元素会放在列表的最后一个 >>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena']
插入
>>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena'] >>> names.insert(2,'Olivia') #强行从Cindy前面插入 >>> names ['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Eric', 'Frank', 'Serena'] >>> names.insert(5,'Anna') >>> names ['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
修改
>>> names ['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena'] >>> names[2]='Tim' #将Olivia修改为Tim >>> names ['Amy', 'Bob', 'Tim', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
删除
>>> names ['Amy', 'Bob', 'Tim', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena'] >>> del names[2] >>> names ['Amy', 'Bob', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena'] >>> del names[4] >>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena'] >>> names.remove("David") #删除指定元素 >>> names ['Amy', 'Bob', 'Cindy', 'Eric', 'Frank', 'Serena'] >>> names.pop() #删除列表最后一个值 'Serena' >>> names ['Amy', 'Bob', 'Cindy', 'Eric', 'Frank'] >>> names.pop(1) #删除列表第二个值 'Bob' >>> names ['Amy', 'Cindy', 'Eric', 'Frank'] >>> names.clear() #清空列表 >>> names [] >>> del names #删除列表 >>> names Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'names' is not defined
扩展
>>> names=['Amy','Bob','Cindy','David','Eric','Frank'] >>> b=[1,2,3] >>> names.extend(b) >>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 1, 2, 3]
拷贝
>>> import copy >>> names=['Amy','Bob','Cindy',['David','Eric'],'Frank'] >>> names_copy_1=names.copy() #浅拷贝,只拷贝第一层,可以看做拷贝了第二层的内存地址 >>> names_copy_2=names #names_copy_2和names完全一致,names修改,names_copy_2也跟着修改 >>> names_copy_3=copy.copy(names) #浅拷贝,与names.copy()效果完全一致 >>> names_copy_4=names[:] #完全切片的形式创建浅拷贝,与names.copy()效果完全一致 >>> names_copy_5=list(names) #工厂函数的形式创建浅拷贝,与names.copy()效果完全一致 >>> names_copy_6=copy.deepcopy(names) #深拷贝,names_copy与names完全独立 >>> names ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_1 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_2 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_3 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_4 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_5 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names_copy_6 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank'] >>> names[2]="森碟" >>> names[3][0]="DAVID" >>> names ['Amy', 'Bob', '森碟', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_1 ['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_2 ['Amy', 'Bob', '森碟', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_3 ['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_4 ['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_5 ['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank'] >>> names_copy_6 ['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> person=['name',['money',100]] >>> p1=person[:] >>> p2=person[:] >>> p1[0]='husband' >>> p2[0]='wife' >>> p1[1][1]=50 >>> p1 ['husband', ['money', 50]] >>> p2 ['wife', ['money', 50]] >>>
统计
>>> names=['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3] >>> names.count("Amy") 2
排序&反转
>>> names ['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3] >>> names.sort() #排序 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'int' and 'str' #3.0里不同数据类型不能放在一起排序了 >>> names[-3]='1' >>> names[-2]='2' >>> names[-1]='3' >>> names.append('#') >>> names.append('bob') >>> names.append('amy') >>> names ['1', '2', '3', 'Amy', 'Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', '#', 'bob', 'amy'] >>> names.sort() #按照ASCII码顺序排序,一般顺序为:特殊字符、数字、大写字母、小写字母 >>> names ['#', '1', '2', '3', 'Amy', 'Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'amy', 'bob'] >>> names.reverse() #反转 >>> names ['bob', 'amy', 'Frank', 'Eric', 'David', 'Cindy', 'Bob', 'Amy', 'Amy', '3', '2', '1', '#']
获取下标
>>> names=['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3] >>> names.index("Amy") #只返回找到的第一个下标 0
列表循环
>>> names=['Amy','Bob','Cindy',['David','Eric'],'Frank'] >>> for i in names: ... print(i) ... Amy Bob Cindy ['David', 'Eric'] Frank
列表循环取出元素以及下标
>>> list=['a','b','c'] >>> for item in list: ... print(list.index(item),item) #方法1 ... 0 a 1 b 2 c >>> for i in enumerate(list): ... print(i) #方法2 ... (0, 'a') (1, 'b') (2, 'c') >>> for index,item in enumerate(list): ... print(index,item) #方法3 ... 0 a 1 b 2 c
其他
>>> names=['Amy','Bob','Cindy','David'] >>> 'Amy' in names #判断一个值是否在列表中,列表、元组、字符串、字典、集合均如此操作 True >>> Alex in names Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'Alex' is not defined
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。
定义元组(tuple)
names=('Amy','Bob','Cindy','David')
它只有2个方法,一个是count,一个是index。
>>> names=('Amy','Bob','Cindy','Amy','David') >>> names.count('Amy') #统计 2 >>> names.index('Amy') #获取下标,只返回找到的第一个下标 0