列表初识:
列表是Python3 里面常见的一种数据类型之一,列表每个元素都分配一个数据用来索引,他的位置 是从0开始,第一个数据 是0,第二个数据是1,以此类推
列表的表达形式是方括号表示,逗号隔开,列表类的元素不要求是统一的形式,可以是数字,也可以字符,或者是两的混合体。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
list1 = ["a","b","c","d","e","f"] list2 = ["google","baidu","bingo","sina","facebook"] list3 = [1,2,3,"A","B","C","google"]
下面来我们来打印一下结果:
list1 = ["a","b","c","d","e","f"] list2 = ["google","baidu","bingo","sina","facebook"] list3 = ["1","2","3","A","B","C","google"] print(list1) print(list2) print(list3) #结果是: ['a', 'b', 'c', 'd', 'e', 'f'] ['google', 'baidu', 'bingo', 'sina', 'facebook'] ['1', '2', '3', 'A', 'B', 'C', 'google']
列表的常见操作有:增、删、减、查
A1 查看列表的方法:切片
A.切片的方法来查看列表,第一个位置从0开始:
name = ['name1','name2','name3','name4','name5'] print(“name_first_date:”,name[0]) #取的第一个
打印结果是:
name_first_date: name1
B.第一个元素是:0位,第二个是:1位,第三个是2位。。。。。。以此类推。
name = ['name1','name2','name3','name4','name5'] print(name[1:3]) #这表示从第二个位置开始取,取后三个位,但是第三个位的第4个元素是不会取的,可以这记住:从第二个位置开始取,取到第三个元素
打印结果是:
['name2', 'name3']
C.想要把整个列表取完:
name = ['name1','name2','name3','name4','name5'] print(name[1:]) #整个列表取完,第二个位留空就行
打印结果是:
['name2', 'name3', 'name4', 'name5']
D.想要取到倒数第二值:
name = ['name1','name2','name3','name4','name5'] print(name[:-1]) #取到倒数第二值
打印结果是:
['name1', 'name2', 'name3', 'name4']
E.想要从左到右一个一个取值:
name = ['name1','name2','name3','name4','name5'] print(name[0::1]) #从左向右一个一个去取,这里的1代表:步长 print(name[1:-1:1]) #从name2,从左向右一个一个去取,取到倒数第二个值
F.想要隔一个取,或隔二个取值:
name = ['name1','name2','name3','name4','name5'] print(name[1::2]) #从左到中隔一个去取 print (name[0::3]) #从左到中隔二个去取
打印结果是:
['name2', 'name4'] ['name1', 'name4']
G:步长负数代表方向为从右向左:
name = ['name1','name2','name3','name4','name5','name6','name7'] print(name[3::-2]) #-2代表从右开始走,步长为2,读数也是从右往左走,3代表从name4开始,从右往左去取 print(name[2:1:-1]) #-1代表从右开始走,步长为1.读数是从name3开始,因为name3的索引值为2,取的范围是 name3-name2,但是不会取name2 print(name[5:2:-1])
打印结果是:
['name4', 'name2'] ['name3'] ['name6', 'name5', 'name4']
A2 查看列表的方法:index
Index 是取元素在列表中的位置。
def index(self, *args, **kwargs): # real signature unknown """ Return first index of value. Raises ValueError if the value is not present. """ pass
name = ['name1','name2','name3','name4','name5','name6','name7'] print (name.index('name5')) #结果是 4
再来一组看看:
name = ['name1','name2','name3','name4','name5','name6','name7'] print (name.index('name2')) print (name.index('name4')) print (name.index('name5')) print (name.index('name7'))
1 3 4 6
A3 查看列表的方法:count,列表中元素出现的次数
count 的英文解释是:
def count(self, *args, **kwargs): # real signature unknown """ Return number of occurrences of value. """ pass
我们来看代码:
message = [1,2,2,1,1,2,1,2,2,1,2,3,4,5,1,2,1,2] print (message.count(2)) #结果是 8 #代表着message列表里面2这个元素出现了8次
A4 查看列表的方法:in,查看一个元素是否出现在列表中
name = ['name1','name2','name3','name4','name5','name6','name7'] print ('name9' in name)
打印结果是:
False
B 增加列表的方法:
B1.a.append()
a.append()方法是在列表的后最后一位加上一个元素
英文解释是:
def append(self, *args, **kwargs): # real signature unknown """ Append object to the end of the list. """ pass
请看代码:
name = ['name1','name2','name3','name4','name5','name6','name7'] name.append('name9') print (name) #执行结果 ['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name9']
直接在'name7'的后面加了一个‘name9’.能不能加两个呢?不能
name = ['name1','name2','name3','name4','name5','name6','name7'] name.append('name9','name10') print (name) #执行结果: name.append('name9','name10') TypeError: append() takes exactly one argument (2 given)
错误,append()只能加一个数据,给了两个,报错!!!
B2.insert() 方法
如果我们要在列表的指定位置加入一个元素,就要用到insert 方法。
insert 英文解释是:在某个标志位前插入一个对象或元素。
def insert(self, *args, **kwargs): # real signature unknown """ Insert object before index. """ pass
name = ['name1','name2','name3','name4','name5','name6','name7'] name.insert(3,'Rollo.St') print (name) #执行结果: ['name1', 'name2', 'name3', 'Rollo.St', 'name4', 'name5', 'name6', 'name7']
也是只能插入一个对象,不能两个或多个:
name = ['name1','name2','name3','name4','name5','name6','name7'] name.insert(3,4,'Rollo.St','name11') print (name) #执行结果: name.insert(3,4,'Rollo.St','name11') TypeError: insert() takes exactly 2 arguments (4 given)
B3.extend() 方法
extend() 可以在一个列表的末尾追加另一个列表中的多个值。
def extend(self, *args, **kwargs): # real signature unknown """ Extend list by appending elements from the iterable. """
我们来看演示代码:
name = ['name1','name2','name3','name4','name5','name6','name7'] name2 = [1,2,3,4,5] name.extend(name2) print (name) #执行结果 ['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 1, 2, 3, 4, 5]
append,将对象直接添加到原数组尾部,不加修改,直接添加 extend,添加的对象被解析为iterable对象,将其中元素逐一添加到原数组尾部 文档中解析分别是: extend: append object to end append: extend list by appending elements from the iterable
C.列表的修改
可以用找出索引位,直接换值。
name = ['name1','name2','name3','name4','name5','name6','name7'] name[0] = 1 #扫行结果: [1, 'name2', 'name3', 'name4', 'name5', 'name6', 'name7']
name = ['name1','name2','name3','name4','name5','name6','name7'] name[0:2] = ['K1','K2'] #2个位,赋两个值。 print (name) #执行结果: ['K1', 'K2', 'name3', 'name4', 'name5', 'name6', 'name7']
name = ['name1','name2','name3','name4','name5','name6','name7'] name[1:4] = ['X1','X2'] #从索引1到3位,也就是name2=X1,name3=X2,name4没有赋值,会被删除,这是少赋值的情况,被删除。 print (name) #执行结果: ['name1', 'X1', 'X2', 'name5', 'name6', 'name7']
name = ['name1','name2','name3','name4','name5','name6','name7'] name[0:2] = ['V1','V2','V3'] #从0开始到1位,共2位要修改,多了一个V3。但是会加上去 print (name) #执行结果: ['V1', 'V2', 'V3', 'name3', 'name4', 'name5', 'name6', 'name7']
D.列表的排序
D1 a.sort(),sort的用法:a.sort(
cmp
=
None
, key
=
None
, reverse
=
False
)
英文解释是:
def sort(self, *args, **kwargs): # real signature unknown """ Stable sort *IN PLACE*. """ pass
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.sort() print(name) #执行结果: ['Yname6', 'Yname7', 'name1', 'name2', 'name3', 'name4', 'name5'] #按ASCII值排序
sort()里面还有可以带reverse,
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.sort(reverse=True) print(name) #执行结果: ['name5', 'name4', 'name3', 'name2', 'name1', 'Yname7', 'Yname6']
D2 reverse()
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.reverse() print(name) #执行结果: ['Yname7', 'Yname6', 'name5', 'name4', 'name3', 'name2', 'name1']
E.列表的删除方法:
E1.remove(),只能删除一个值
def remove(self, *args, **kwargs): # real signature unknown """ Remove first occurrence of value. Raises ValueError if the value is not present. """ pass
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.remove(name[1]) print (name) #执行结果: ['name1', 'name3', 'name4', 'name5', 'Yname6', 'Yname7']
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.remove('name3') print (name) #执行结果: ['name1', 'name2', 'name4', 'name5', 'Yname6', 'Yname7'] #'name3'被删除了
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.remove('name3','name4') #remove两个值看看 print (name) ##执行结果: name.remove('name3','name4') TypeError: remove() takes exactly one argument (2 given) #只能一个,给了两个
E2.pop(index),只指定位置删除
英文的解释:
def pop(self, *args, **kwargs): # real signature unknown """ Remove and return item at index (default last). #默认删除最后一个 Raises IndexError if list is empty or index is out of range. """ pass
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.pop(5) print (name) #执行结果: ['name1', 'name2', 'name3', 'name4', 'name5', 'Yname7']
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] get = name.pop(1) print (get) #执行结果: name2
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.pop() #默认删除最后一个 print (name) #执行结果: ['name1', 'name2', 'name3', 'name4', 'name5', 'Yname6']
E3.del 删除
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] del name
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] del name[3] print(name) #执行结果: ['name1', 'name2', 'name3', 'name5', 'Yname6', 'Yname7']
E4.clear() 清空
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name.clear() print(name) #执行结果: []
F.List copy()方法
name = ['name1','name2','name3','name4','name5','Yname6','Yname7'] name2 = name.copy() print (name2) #执行结果: ['name1', 'name2', 'name3', 'name4', 'name5', 'Yname6', 'Yname7']
copy 要注意的两点:
1.0 copy()和直接=赋值的区别:
a=[0,1,2,3,4,5] b=a c=a.copy() del a[1] ''' 各变量值为: a=[0, 2, 3, 4, 5] b=[0, 2, 3, 4, 5] c=[0, 1, 2, 3, 4, 5] ''' b.remove(4) ''' 各变量值为: a=[0, 2, 3, 5] b=[0, 2, 3, 5] c=[0, 1, 2, 3, 4, 5] ''' c.append(9) ''' 各变量值为: a=[0, 2, 3, 5] b=[0, 2, 3, 5] c=[0, 1, 2, 3, 4, 5, 9] '''
可以看出,使用=直接赋值,是引用赋值,更改一个,另一个同样会变, 例子中的a,b改变两次都影响到了对方
copy() 则顾名思义,复制一个副本,原值和新复制的变量互不影响 「a,c」
2.0 copy() 只是是浅度复制
b = [{'name': 'soso', 'age': 23}, {'name': 'rollo', 'age': 15}] c = b.copy() del b[1] b[0]['age'] = 19 print('b', b) print('c', c) #执行结果: b [{'name': 'soso', 'age': 19}] c [{'name': 'soso', 'age': 19}, {'name': 'rollo', 'age': 15}]]
可以看出,copy() 只是是浅度复制,修改列表不会互相影响,但是修改列表里面的对象会影响到对方列表里面对象