列表的操作(二)
列表是一个有序的操作特别灵活的可变数据类型,可以进行删减、添加、复制、排序、迭代等多种操作,进行详细的分析。
1. 判断元素是否在列表中
使用 in
或者 not in
判断是否在列表中
>>> list1=[1,3,4,[2,3,4],'name','age']
>>> 1 in list1 #1是列表的成员
True
>>> 2 in list1 #2在第四个位置的列表中,但不是在list1中
False
>>> [2,3,4] in list1 #该列表在list1中
True
>>> 'age' in list1
True
2. 替换
>>> a=['a','b','c','d','e','f']
>>> a[1]='m' #把索引为1的'b'换成‘m'。
>>> a
['a', 'm', 'c', 'd', 'e', 'f']
>>> a[1],a[2]='g','h' #替换两个
>>> a
['a', 'g', 'h', 'd', 'e', 'f']
3. 复制
我们有时候会复制一下这个列表,可以采用下面的方法
3.1变量相等
- 直接两个变量相等,这样的复制改变其中一个,另外一个也会改变
>>> names=['Max','Kiki','Melinda']
>>> namescopy=names #两个变量相等
>>> namescopy[1]='Hello Kitty' #把namescopy第二个元素更换
>>> namescopy #改变
['Max', 'Hello Kitty', 'Melinda']
>>> names #改变
['Max', 'Hello Kitty', 'Melinda']
3.2 切片复制
- 切片式的复制,改变复制的列表不会改变原来的列表,如果只是部分切片,同样不会改变原来的列表。
>>> names=['Max','Kiki','Melinda']
>>> namescopy=names[:] #namescopy等于names的全部切片
>>> namescopy[1]='Hello Kitty' #改变namescopy的第二个元素
>>> namescopy #改变
['Max', 'Hello Kitty', 'Melinda']
>>> names #不改变
['Max', 'Kiki', 'Melinda']
3.3 list.copy()
- 使用list.copy()来进行复制,改变复制的列表不会改变原来的列表
>>> names=['Max','Kiki','Melinda']
>>> namescopy=names.copy() #使用list.copy()复制
>>> namescopy[1]='Hello Kitty'
>>> namescopy #改变
['Max', 'Hello Kitty', 'Melinda']
>>> names #不改变
['Max', 'Kiki', 'Melinda']
4. 增加
列表元素的增加有三种方法,分别是append(), insert(), extend()。
4.1 append
list.append()
是在列表的最后添加元素,本方法经常会用在添加元素或者设立一个空列表,通过迭代添加所需要的所有元素。
>>> Names=['Max','Kiki']
>>> Names.append('Melinda')#添加一个新名字
>>> Names
['Max', 'Kiki', 'Melinda']
>>> List=[1,2,3,[1,2]]
>>> List.append('(L,O,V,E)') #添加一个字符串
>>> List
[1, 2, 3, [1, 2], '(L,O,V,E)']
4.2 insert
list.insert(index, obj)
可以在列表的指定索引位置添加元素。当元素插入之后,当前及之后的元素的索引会统一逐次向后移动。
>>> list=[1,2,3,4,5,6]
>>> list[3] #索引3的元素为4
4
>>> list.insert(3,'e') #在索引3的位置是插入'e'
>>> list[3] #返回插入的索引为3的元素
'e'
>>> list[4] #元素4的索引变成了4
4
4.3 extend
list.extend(obj)
,obj参数指的是list,是进行拓展。
>>> list1=[1,2,3]
>>> list2=['a','b','c']
>>> list1.extend(list2) #把list2元素连接在list1中
>>> list1
[1, 2, 3, 'a', 'b', 'c']
4.4 连接+
’ + ‘可以直接把两个或者多个列表连接到一起成为一个列表
>>> list1=[1,2,3]
>>> list2=['a','b','c']
>>> list3=['#','$','^']
>>> list1+list2+list3 #把三个列表连接为一个列表
[1, 2, 3, 'a', 'b', 'c', '#', '$', '^']
4.5 重复 *
‘ * ‘ 可以把字符串重复,同时可以把一个数列里的元素多次重复。
>>> name=['Max','Kiki']
>>> name*2 #重复两次
['Max', 'Kiki', 'Max', 'Kiki']
>>> name*3 #重复三次
['Max', 'Kiki', 'Max', 'Kiki', 'Max', 'Kiki']
>>> Apple1=['Mac']
>>> Apple2=['iphone','ipad']
>>> Apple3=['ipod']
>>> Apple1*2+Apple2+Apple3*2 # ‘+’ ‘*’同时使用
['Mac', 'Mac', 'iphone', 'ipad', 'ipod', 'ipod']
5. 删减
5.1 pop
list.pop()
是删除列表最后一个元素并返回该元素。这个可以用于提取列表的最后一个元素,可以用在栈中比如后进先出。
>>> Apple=['Latex','Office','iWork','Python','Typora','Mathtoolpix','itext']
>>> Apple.pop() #删除并返回该元素
'itext'
>>>Apple #已经没有里‘itext’。
['Latex','Office','iWork','Python','Typora','Mathtoolpix']
>>> Apple.pop()
'Mathtoolpix'
>>> Apple.pop()
'Typora'
>>> Apple.pop()
'Python'
>>> Apple.pop()
'iWork'
>>> Apple.pop()
'Office'
>>> Apple.pop()
'Latex'
>>> Apple.pop() #列表通过pop(),已经删除全部元素,则会出现IndexError错误。
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
Apple.pop()
IndexError: pop from empty list
5.2 remove
list.remove(obj)
用于移除列表中某个元素,如果该元素有多个,默认移除第一项
>>> App=['Latex','Office','Office','iWork','Python','Typora','Mathtoolpix','itext']
>>> App.remove('Typora') #移除'typora'
>>> App
['Latex', 'Office', 'Office', 'iWork', 'Python', 'Mathtoolpix', 'itext']
>>> App.remove('Office') #移除两个'Office'的第一个
>>> App
['Latex', 'Office', 'iWork', 'Python', 'Mathtoolpix', 'itext']
5.3 clear
list.clear()
把列表中的所有元素删除情况,列表变为空列表
>>> App=['Latex','Office','iWork','Python','Typora','Mathtoolpix','itext']
>>> App.clear()
>>> App
[]
5.4 del
可以使用del list []
来删除列表中某一个元素
>>> App=['Latex','Office','iWork','Python','Typora','Mathtoolpix','itext']
>>> del App[3] #删除来'python'。
>>> App
['Latex', 'Office', 'iWork', 'Typora', 'Mathtoolpix', 'itext']
6. 排序
在进行某些运算或者程序运行时,需要对列表进行排序,甚至需要反向排序。
6.1 sort
list.sort(cmp=None, key=None, reverse=False)
#reverse = True 降序, reverse = False 升序(默认
只适用于全部为数字或者全部为字符串的排序,并且排序之后原列表改变,如果仍需要调用之前的列表,则采用本篇文章前面的总结:切片复制或者list.copy()
。
全部都为字母则按照a-z
顺序排列
App=['Latex','Office','iWork','Python','Typora','Mathtoolpix','itext']
>>> App.sort() # 按照a-z的顺序排列
>>> App
['Latex', 'Mathtoolpix', 'Office', 'Typora', 'iWork', 'itext']
>>> App.sort(reverse=True) #按照字母的降序排列
>>> App
['itext', 'iWork', 'Typora', 'Office', 'Mathtoolpix', 'Latex']
如果字符串的首字母有大写和小写,则按照A-Z
,a-z
的顺序排列,如果reverse=True
,则反过来降序。
>>> App=['katex','Office','iWork','python','typora','Mathtoolpix','itext']
>>> App.sort()
>>> App
['Mathtoolpix', 'Office', 'iWork', 'itext', 'katex', 'python', 'typora']
如果全部都为数字,则从小到大排列。
>>> numbers=[3,6,23,6,7,1,3]
>>> numbers.sort()
>>> numbers
[1, 3, 3, 6, 6, 7, 23]
6.2 sorted
sorted(list)
直接返回的就是排序之后的列表,但是不改变原来的列表。
>>> a=[1,5,3,6,7,2,3]
>>> b=sorted(a)
>>> b #改变顺序赋值给b
[1, 2, 3, 3, 5, 6, 7]
>>> a #不改变原来的列表顺序
[1, 5, 3, 6, 7, 2, 3]
6.3 reverse
list.reverse()
把列表中的元素反向排序。
>>> Pro=['Max','age','height','weight']
>>> Pro.reverse()
>>> Pro
['weight', 'height', 'age', 'Max']
#list[::-1]和list.reverse()一样的作用,可以把列表反向输出,但是[::-1]不改变原列表
>>> Pro[::-1]
['Max', 'age', 'height', 'weight']