python数据类型之列表
列表定义
列表是由一系列案特定顺序排列的元素组成。在python中,用方括号([])来表示,并用逗号来分隔其中的元素。
names = ['Alex',"Tenglan",'Eric']
列表访问
- 列表元素的访问从索引0开始,而不是索引1开始。
- 列表的索引可以是从负数开始。这种语法经常在需要在不知道列表长度的情况下访问元素。
>> names[0] 'Alex' >>> names[2] 'Eric' >>> names[-1] 'Eric' >>> names[-2] #还可以倒着取 'Tenglan'
列表操作
修改列表元素
>>> names ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] >>> names[2] = "该换人了" >>> names ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
添加列表元素
- 从列表末尾添加,利用append方法。
>>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy'] >>> names.append("我是新来的") >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
- 从列表任意位置添加,利用insert方法。
>>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] >>> names.insert(2,"强行从Eric前面插入") >>> names ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] >>> names.insert(5,"从eric后面插入试试新姿势") >>> names ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
删除列表元素
- 利用“del”删除,删除的列表元素不能再使用。
>>> del names[2] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] >>> del names[4] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] >>>
- 利用pop方法删除
在pop方法中,默认是从列表末尾删除,但也可以给pop方法传参,参数表示列表的索引;利用pop方法弹出的列表元素可以被再次使用。
1 >>>name = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的'] 2 >>> names.pop() #删除列表最后一个值 3 '我是新来的' 4 >>> names 5 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy'] 6 7 >>> names.pop(2) #删除列表任意一个值 8 '我是新来的' 9 >>> names 10 ['Alex', 'Tenglan', 'Tom', 'Amy']
- 利用列表元素值删除
使用remove方法实现。
1 >>>name = ['Alex', 'Tenglan', 'Eric', 'Rain'] 2 >>>name.remove('Eric') 3 ['Alex', 'Tenglan','Rain']
- 如果要从列表中删除一个元素,而这个元素不会再以任何方式使用,那么就用“del”删除,反之,用pop方法删除。
- 方法remove只能删除第一个指定的元素。如果要删除的值在列表中存在多个,那么就要用循环去删除。
列表排序
- 永久性改变列表顺序
利用sort方法实现。给sort方法的参数为“reverse=True”时,可以反向排序;排序的原则是按照字母顺序排序的。
1 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] 2 >>> names.sort() 3 >>> names 4 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom'] 5 6 >>> names.sorted(reverse=True) #反转 7 >>> names 8 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
同样也可以利用reverse方法实现反转。
1 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] 2 >>> names.sort() 3 >>> names 4 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom'] 5 6 >>> names.reverse() #反转 7 >>> names 8 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
还需要注意的是,在python3中,不同数据类型是无法排序的
1 >>> names 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] 3 >>> names.sort() #排序 4 Traceback (most recent call last): 5 File "<stdin>", line 1, in <module> 6 TypeError: unorderable types: int() < str()
- 保留原来列表的排列顺序
利用sorted方法实现。跟sort方法同理,给sorted方法的参数为“reverse=True”时,可以反向排序。
1 >>>names = ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] 2 >>>print(sorted(names)) 3 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom'] 4 5 >>>print(names) 6 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
列表元素下表获取
利用index方法实现。
1 >>> print(names) 2 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1'] 3 >>> names.index("Amy") 4 2 #只返回找到的第一个下标
列表元素出现次数获取
利用count方法实现
1 >>> print(names) 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] 3 >>> names.count("Amy") 4 2
获取列表长度
利用len方法实现。需要注意的是,在计算列表长度时,是从1开始的。
1 >>> names = ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] 2 >>> len(names) 3 8
列表切片操作
需要注意的是,“:”前面的索引表示起始位置,“:”后面的索引表示终止位置。
1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] 2 >>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4 3 ['Tenglan', 'Eric', 'Rain'] 4 >>> names[1:-1] #取下标1至-1的值,不包括-1 5 ['Tenglan', 'Eric', 'Rain', 'Tom'] 6 >>> names[0:3] 7 ['Alex', 'Tenglan', 'Eric'] 8 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样 9 ['Alex', 'Tenglan', 'Eric'] 10 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写 11 ['Rain', 'Tom', 'Amy'] 12 >>> names[3:-1] #这样-1就不会被包含了 13 ['Rain', 'Tom'] 14 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个 15 ['Alex', 'Eric', 'Tom'] 16 >>> names[::2] #和上句效果一样 17 ['Alex', 'Eric', 'Tom']
列表解析
列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。
1 >>>s = [value**2 for value in range(1,5)] 2 >>>print(s) 3 [1, 4, 9, 16]
数值列表
可以利用list方法和range方法,快速实现定义数值列表。
1 >>>numbers = list(range(1,30,3)) 2 >>>print(numbers) 3 [1, 4, 7, 10, 13, 16, 19, 22, 25, 28]
可以利用max方法,min方法和sum方法,计算需要的值。
1 >>>numbers = list(range(1,30,3)) 2 >>>print(numbers) 3 >>>print(min(numbers)) 4 >>>print(max(numbers)) 5 >>>print(sum(numbers)) 6 [1, 4, 7, 10, 13, 16, 19, 22, 25, 28] 7 1 8 28 9 145