Python列表常⽤⽅法总结
⼀、创建列表
①只要把逗号分隔的不同的数据项使⽤⽅括号[ ]括起来即可;
下标(⾓标,索引)从0开始;最后⼀个元素的下标可以是-1;
list = ['1',‘2,‘3’]
list = []
list = list()
list2 = list()
print(list2, type(list2)) # [] <class 'list'>
list1 = list('stysyahsh') # 将⼀个可序列化的对象转换为列表对象
print(list1) # ['s', 't', 'y', 's', 'y', 'a', 'h', 's', 'h']
② list() ⽅法将元组转换为列表;但是元组变成列表后的对象内存地址没变。
a_tuple = ('123', 'abc', 123)
print(a_tuple, id(a_tuple)) # ('123', 'abc', 123) 2374451842688
a_list = list(a_tuple)
print(a_list, id(a_list)) # ['123', 'abc', 123] 2374451917888
⼆、列表添加新元素
① list.append()默认在列表的末尾增加⼀个元素。
② list.insert(4,'a')在指定位置添加元素;【注意】①如果指定的下标对应的元素不存在,那么就是默认在列表的末尾添加新的元素【在下标为4的元素位置添加a元素】;②如果传⼊的指定下标不存在即超出了该列表的索引值,同样也会插⼊成功⽽不报错;③insert之后的列表对象不变,即不会产⽣⼀个新的列表对象
list1 = ['1', '2', '3']
print(id(list1)) # 3019052845760
list1.insert(1, 'a')
print(list1, id(list1)) # ['1', 'a', '2', '3'] 3019052845760
list1.insert(100, 'b')
print(list1, id(list1)) # ['1', 'a', '2', '3', 'b'] 3019052845760
list1.insert(-1, 'c')
print(list1, id(list1)) # ['1', 'a', '2', '3', 'c', 'b'] 3019052845760
list1.insert(-2, 'd')
print(list1, id(list1)) # ['1', 'a', '2', '3', 'd', 'c', 'b'] 3019052845760
list1.insert(-100, 'fg')
print(list1, id(list1)) # ['fg', '1', 'a', '2', '3', 'd', 'c', 'b'] 3019052845760
list1.insert('e')
# # Traceback (most recent call last):
# # File "C:\Users\liangshu.hu\PycharmProjects\practice\kkkk.py", line 16, in <module>
# # list1.insert('e')
# # TypeError: insert expected 2 arguments, got 1
③ d(list2)合并两个两个列表(合并list1和list2);【注意】合并后没有产⽣新的列表对象,且被合并的列表对象依旧存在于内存中。
list1 = ['1', '2', '3']
list2 = ['a', 'b', 'c']
print(list1, id(list1)) # ['1', '2', '3'] 2568023542464
print(list1, id(list1)) # ['1', '2', '3', 'a', 'b', 'c'] 2568023542464
print(list2, id(list2)) # ['a', 'b', 'c'] 2568023576896
④ list1+list2 :组合列表:产⽣⼀个新的列表对象
list1 = ['1', '2', '3', '4']
print(list1, id(list1)) # ['1', '2', '3', '4'] 2912099470144
list2 = ['a', 'b', 'c', 'd']
print(list2, id(list2)) # ['a', 'b', 'c', 'd'] 2912099504768
print(list1+list2, id(list1+list2)) # ['1', '2', '3', '4', 'a', 'b', 'c', 'd'] 2912099787264
⑤ list1*n :重复列表:产⽣⼀个新的列表对象
list1 = ['1', '2', '3', '4']
print(list1, id(list1)) # ['1', '2', '3', '4'] 2912099470144
list2 = list1 * 3
print(list2, id(list2)) # ['1', '2', '3', '4', '1', '2', '3', '4', '1', '2', '3', '4'] 3037215854784
三、获取列表中的值
①print(list):返回列表
②for i in list: print i :遍历列表
③print(list[n]):使⽤下标索引来获取列表中的某个指定值;同样也可以使⽤ list[n:m]⽅式截取字符
④unt(xx)):查看某个元素在该列表⾥的数量;如果该元素不存在,那么返回0
list1 = ['1', '2', '2', '4', 'a', 'b']
unt('2')) # 2
unt('q')) # 0
⑤print(list.index(xx)) :在该列表中到某个元素的下标索引值;如果该列表中某个元素有多个,则只返回某个元素第⼀次出现的下标索引值;如果在该列表中查⼀个不存在的元素的下标索引值则会报错。(根据列表中的值获取该值所在列表中的下标索引)
a=[72, 56, 76, 84, 80, 88]
print(a.index(76)) # 2
但是,list.index(xx) ⽅法仅仅能获取都第⼀个匹配value的下标索引值,此时,我们可以使⽤第⼆种⽅案来获取列表元素的下标索引值:利⽤ enumerate 函数(可以获取列表中所有重复值的下标索引)
list1 = ['a', 'b', 'c', 'a', 'd', '1', '2', '3', 'a']
print(enumerate(list1)) # <enumerate object at 0x000001AEE37D8080>
# enumerate的输出类型是元组
print(list(
enumerate(list1))) # [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'a'), (4, 'd'), (5, '1'), (6, '2'), (7, '3'), (8, 'a')]
# 获取列表中所有的元素为'a'元素的下标索引值-->返回值是⼀个包含所有元素为'a'的下标索引值的列表
print([i for i, x in enumerate(list1) if x == 'a']) # [0, 3, 8]
四、删除列表中的元素
① list.pop() :默认删除列表的最后⼀个元素;且返回已经删除的元素值
list1 = ['1', '2', '2', '4', 'a', 'b']
a = list1.pop()
print(list1) # ['1', '2', '2', '4', 'a']
print(a) # b
② list.pop(n) :删除列表的指定下标索引位置的元素;如果删除列表中的⼀个不存在的元素则会报错
list1 = ['1', '2', '2', '4', 'a', 'b']
a = list1.pop(0)
print(list1) # ['1', '2', '2', '4', 'a']
print(a) # 1
b = list1.pop(100)
print(b)
# Traceback (most recent call last):
# File "C:\Users\liangshu.hu\PycharmProjects\practice\pksjjdj.py", line 14, in <module>
# b = list1.pop(100)
# IndexError: pop index out of range
③ ve(xx):删除列表中⾥⾯的某个指定元素;如果列表中有多个相同的元素,默认删除第⼀个出现的元素;【注意】每⼀次只能删除⼀个列表中的指定元素;
list1 = ['1', '2', '2', '4', 'a', 'b']
print(list1) # ['1', '2', '2', '4', 'b']
print(list1) # ['1', '2', '4', 'b']
④print(list.pop()):有返回值,返回列表中已经被删除的元素
print(list1.pop()) # b
⑤ve()) ⽆返回值
list1 = ['1', '2', '2', '4', 'a', 'b']
ve('2')) # None
⑥del list[n] :删除列表指定下标索引对应的元素【从内存中回收列表的指定元素】
list1 = ['1', '2', '2', '4', 'a', 'b']
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 2727783140096
del list1[0]
print(list1, id(list1)) # ['2', '2', '4', 'a', 'b'] 2727783140096
⑦del list :删除整个列表,列表删除后⽆法访问【从内存回收整个列表】
list1 = ['1', '2', '2', '4', 'a', 'b']
del list1
print(list1, id(list1))
# Traceback (most recent call last):
# File "C:\Users\liangshu.hu\PycharmProjects\practice\pksjjdj.py", line 11, in <module>
# print(list1, id(list1))
# NameError: name 'list1' is not defined
⑧⽆论是 list.pop() ⽅法还是 ve() ⽅法删除元素后的列表内存地址不变,即列表删除元素操作不会产⽣⼀个新列表list1 = ['1', '2', '2', '4', 'a', 'b']
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 2118284184320
list1.pop()
print(list1, id(list1)) # ['1', '2', '2', '4', 'a'] 2118284184320
print(list1, id(list1)) # ['1', '2', '4', 'a'] 2118284184320
⑨ list.clear() :清空列表中的元素;但是列表对象仍然存在于内存中。
a = ['Google', 'Runoob', 'Taobao', 'Baidu']
b = [1, 2, 3, 4]
print("a=", a)
print("b=", b)
a.clear()
b.clear()
print("a=", a)
print("b=", b)
五、其他
1、判断元素是否存在于列表中
xx in [] :只能判断元素对象是否存在于列表中;不能判断列表的⼦列表是否存在于列表中。
list1 = ['1', '2', '3', '4', 'a', 'b', 'c']
print('1'in list1) # True
print(['1', 'a'] in list1) # False
2、⽐较两个列表的元素
operator.eq(list1,list2) :实现两个列表的⽐较功能;需要引⼊ operator 模块,适合于任何对象。
import operator
print(operator.eq('hello', 'name')) # False
print(operator.eq('hello', 'hello')) # True
六、排序和反转
① verse() :将列表反转;【注意】反转后的列表内存地址不变,既没有产⽣新的列表对象
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 2881397492416
print(list1, id(list1)) # ['b', 'a', '4', '2', '2', '1'] 2881397492416
② list.sort() :将列表中的元素排序;默认升序排序;【注意】排序后没有产⽣新的列表对象
list1 = ['1', '2', '2', '4', 'a', 'b']
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 2541629901568
list1.sort()
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 2541629901568
③ list.sort(reverse=True) :将列表中的元素排序;降序排列;【注意】排序后没有新的列表对象
list1 = ['1', '2', '2', '4', 'a', 'b']
print(list1, id(list1)) # ['1', '2', '2', '4', 'a', 'b'] 1998451280640
list1.sort(reverse=True)
print(list1, id(list1)) # ['b', 'a', '4', '2', '2', '1'] 1998451280640
【注意】:⼀个列表中同时存在字符串和数字时不能排序;列表的排序是针对某⼀列表中的同类型数据。
1、sort函数
如果对python中的列表进⾏排序,可以使⽤List 类的成员函数 sort ;该函数会在原空间上进⾏操作,对列表本⾝进⾏修改,不返回副本即不返回新的列表对象。
语法如下:
List.sort(cmp=None, key=None, reverse=False)
2、sorted函数
sorted 函数就⽐ sort 函数要强⼤太多;
sort 只能对列表进⾏排序, sorted 可以对所有可迭代类型进⾏排序;并且返回新的已排序的列表对象。语法如下:
sorted(iterable, cmp=None, key=None, reverse=False)
可接受4个参数,含义分别如下:
①iterable:可迭代类型,例如字典、列表
②cmp:⽐较函数,cmp是带两个参数的⽐较函数;key 是带⼀个参数的函数
③key:可迭代类型中某个属性,对给定元素的每⼀项进⾏排序
④reverse:降序或升序
3、结合使⽤
与 sorted 函数经常结合使⽤的有:
①⽐较函数经常会⽤到lambda匿名函数。
sortedlist⽰例:对数个元组组成的列表,以元组中的某⼀项进⾏排序。
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2]) # sort by age
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
②⽐较函数经常会⽤到 operator.itemgetter函数
operator 模块提供的 itemgetter 函数⽤于获取对象的哪些维的数据,参数为⼀些序号。
【注意】 operator.itemgetter 函数获取的不是值,⽽是定义了⼀个函数,通过该函数作⽤到对象上才能获取值。
sorted函数⽤来排序, sorted(iterable[, cmp[, key[, reverse]]])
key 的参数为⼀个函数或者lambda函数。所以 itemgetter可以⽤来当 key 的参数。
# 例如根据第⼆个域和第三个域进⾏排序
a = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=operator.itemgetter(1,2))
③可迭代元素经常会⽤到items
items是字典中的⼀个⽅法,返回由元组组成的列表。
dict={'a':1,'b':2}
ans = sorted(dict.items(), key=lambda x:x[1], reverse=True)
七、列表操作的函数
① len(list) :返回列表元素个数
② max(list) :返回列表元素最⼤值
③ min(list) :返回列表元素最⼩值
④ list(tuple) :将元组转换为列表
⑤ enumerate :打印元素对应的下标
list_ = [1, 2, 3, 44, 'abc', 'lkj']
for i, v in enumerate(list_):
print("value:{},index:{}".format(v, i))
结果如下:
value:1,index:0
value:2,index:1
value:3,index:2
value:44,index:3
value:abc,index:4
value:lkj,index:5
⼋、列表切⽚(列表取值的⼀种⽅法)
① name[n:m] :切⽚是不包含后⾯那个元素的值(顾头不顾尾)
② name[:m] :如果切⽚前⾯⼀个值缺省的话,从开头开始取
③ name[n:] :如果切⽚后⾯的值缺省的话,取到末尾
④ name[:] :如果全部缺省,取全部
⑤ name[n:m:s] :
s表⽰步长,表⽰每隔多少个元素取⼀次列表中的值
步长是正数,从左往右取
步长是负数,从右往左取
【注意】:切⽚同样适⽤于字符串,因为字符串也有下标
九、列表⽣成式
概述:
①列表⽣成式即 List Comprehensions ,是Python内置的⾮常简单却强⼤的可以⽤来创建列表的⽣成式。
②列表⽣成式的结构是在⼀个中括号⾥包含⼀个表达式,然后是⼀个 for 语句,然后是0个或多个for或者 if语句。
③列表表达式可以是任意的,可以在列表中放⼊任意类型的对象。返回结果将是⼀个新的列表。
variable = [out_exp for out_exp in input_list if out_exp == 2]
举例:
1. ⽣成⼀个列表,列表元素分别为 [1*1,2*2,3*3……n*n] ,假设 n=10 。
①若⽤⼀般⽅法实现代码如下:
list1 = []
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论