“Python列表类型”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第4行: 第4行:
 
列表类型用中括号([])表示,也可以通过list(x) 函数将集合或字符串类型转换成列表类型
 
列表类型用中括号([])表示,也可以通过list(x) 函数将集合或字符串类型转换成列表类型
  
==常用操作==
+
==基础操作==
 
===创建列表===
 
===创建列表===
 
*使用“=”直接将一个列表赋值给变量即可创建列表对象。
 
*使用“=”直接将一个列表赋值给变量即可创建列表对象。
第82行: 第82行:
 
>>> ls[0:4:2]
 
>>> ls[0:4:2]
 
[1010, [1010, '1010']]</nowiki>
 
[1010, [1010, '1010']]</nowiki>
 +
 +
 +
==列表对象支持的运算符==
 +
===加法运算符===
 +
*加法运算符+也可以实现列表增加元素的目的,但不属于原地操作,而是返回新列表,涉及大量元素的复制,效率非常低。使用复合赋值运算符+=实现列表追加元素时属于原地操作,与append()方法一样高效。
 +
<nowiki>>>> x = [1, 2, 3]
 +
>>> id(x)
 +
53868168
 +
>>> x = x + [4]                        #连接两个列表
 +
>>> x
 +
[1, 2, 3, 4]
 +
>>> id(x)                              #内存地址发生改变
 +
53875720
 +
>>> x += [5]                          #为列表追加元素
 +
>>> x
 +
[1, 2, 3, 4, 5]
 +
>>> id(x)                              #内存地址不变
 +
53875720
 +
</nowiki>
 +
 +
===乘法运算符===
 +
*乘法运算符<nowiki>*</nowiki>可以用于列表和整数相乘,表示序列重复,返回新列表。运算符*=也可以用于列表元素重复,属于原地操作。
 +
<nowiki>>>> x = [1, 2, 3, 4]
 +
>>> id(x)
 +
54497224
 +
>>> x = x * 2                          #元素重复,返回新列表
 +
>>> x
 +
[1, 2, 3, 4, 1, 2, 3, 4]
 +
>>> id(x)                              #地址发生改变
 +
54603912
 +
>>> x *= 2                              #元素重复,原地进行
 +
>>> x
 +
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
 +
>>> id(x)                              #地址不变</nowiki>
 +
 +
===成员测试运算符in===
 +
*可用于测试列表中是否包含某个元素,查询时间随着列表长度的增加而线性增加,而同样的操作对于集合而言则是常数级的。
 +
 +
>>> 3 in [1, 2, 3]
 +
True
 +
>>> 3 in [1, 2, '3']
 +
False
 +
==列表的操作函数==
 +
 +
*len(ls) 列表ls的元素个数(长度)
 +
 +
*min(ls) 列表ls中的最小元素
 +
 +
*max(ls) 列表ls中的最大元素
 +
 +
*list(x) 将x转变成列表类型
 +
 +
<nowiki>>>> ls = [1010,"1010",[1010,"1010"],1010]
 +
>>> len(ls)
 +
4
 +
>>> ls = [1010, 10.10, 0x1010]
 +
>>> min(ls)
 +
10.1
 +
>>> lt = ["1010", "10.10", "Python"]
 +
>>> max(lt)
 +
'Python'
 +
>>> ls = ls + lt
 +
>>> print(ls)
 +
[1010, 10.1, 4112, '1010', '10.10', 'Python']
 +
>>> min(ls)
 +
Traceback (most recent call last):
 +
  File "<pyshell#46>", line 1, in <module>
 +
    min(ls)
 +
TypeError: '<' not supported between instances of 'str' and 'float'</nowiki>
 +
 +
==列表的操作方法==
 +
==列表的常用方法==
 +
*[[文件:python6-3.png]]
 +
===append()、insert()、extend()===
 +
*append()用于向列表尾部追加一个元素,insert()用于向列表任意指定位置插入一个元素,extend()用于将另一个列表中的所有元素追加至当前列表的尾部。这3个方法都属于原地操作,不影响列表对象在内存中的起始地址。
 +
<nowiki>>>> x = [1, 2, 3]
 +
>>> id(x)                          #查看对象的内存地址
 +
50159368
 +
>>> x.append(4)                    #在尾部追加元素
 +
>>> x.insert(0, 0)                  #在指定位置插入元素
 +
>>> x.extend([5, 6, 7])            #在尾部追加多个元素
 +
>>> x
 +
[0, 1, 2, 3, 4, 5, 6, 7]
 +
>>> id(x)                          #列表在内存中的地址不变
 +
50159368</nowiki>
 +
 +
===pop()、remove()、clear()===
 +
*pop()用于删除并返回指定位置(默认是最后一个)上的元素;remove()用于删除列表中第一个值与指定值相等的元素;clear()用于清空列表中的所有元素。这3个方法也属于原地操作。
 +
*另外,还可以使用del命令删除列表中指定位置的元素,同样也属于原地操作。
 +
<nowiki>>>> x = [1, 2, 3, 4, 5, 6, 7]
 +
>>> x.pop()                        #弹出并返回尾部元素
 +
7
 +
>>> x.pop(0)                      #弹出并返回指定位置的元素
 +
1
 +
>>> x.clear()                      #删除所有元素
 +
>>> x
 +
[]
 +
>>> x = [1, 2, 1, 1, 2]
 +
>>> x.remove(2)                    #删除首个值为2的元素
 +
>>> del x[3]                      #删除指定位置上的元素
 +
>>> x
 +
[1, 1, 1]</nowiki>
 +
 +
===count()、index()===
 +
*列表方法count()用于返回列表中指定元素出现的次数;index()用于返回指定元素在列表中首次出现的位置,如果该元素不在列表中则抛出异常。
 +
<nowiki>>>> x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
 +
>>> x.count(3)                    #元素3在列表x中的出现次数
 +
3
 +
>>> x.count(5)                    #不存在,返回0
 +
0
 +
>>> x.index(2)                    #元素2在列表x中首次出现的索引
 +
1
 +
>>> x.index(5)                    #列表x中没有5,抛出异常
 +
ValueError: 5 is not in list</nowiki>
 +
 +
===sort()、reverse()===
 +
*列表对象的sort()方法用于按照指定的规则对所有元素进行排序;reverse()方法用于将列表所有元素逆序或翻转。
 +
<nowiki>>>> x = list(range(11))                      #包含11个整数的列表
 +
>>> import random
 +
>>> random.shuffle(x)                        #把列表x中的元素随机乱序
 +
>>> x
 +
[6, 0, 1, 7, 4, 3, 2, 8, 5, 10, 9]
 +
>>> x.sort(key=lambda item:len(str(item)), reverse=True)  #按转换成字符串以后的长度,降序排列
 +
>>> x
 +
[10, 6, 0, 1, 7, 4, 3, 2, 8, 5, 9]
 +
>>> x.sort(key=str)                          #按转换为字符串后的大小,升序排序
 +
>>> x
 +
[0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
 +
>>> x.sort()                                  #按默认规则排序
 +
>>> x
 +
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 +
>>> x.reverse()                              #把所有元素翻转或逆序
 +
>>> x
 +
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]</nowiki>
 +
 +
 +
*max()、min()函数用于返回列表中所有元素的最大值和最小值,
 +
*sum()函数用于返回列表中所有元素之和;
 +
*len()函数用于返回列表中元素个数,zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的zip对象;
 +
*enumerate()函数返回包含若干下标和值的迭代对象;
 +
*map()函数把函数映射到列表上的每个元素,filter()函数根据指定函数的返回值对列表元素进行过滤;
 +
*all()函数用来测试列表中是否所有元素都等价于True,any()用来测试列表中是否有等价于True的元素。
 +
*标准库functools中的reduce()函数以及标准库itertools中的compress()、groupby()、dropwhile()等大量函数也可以对列表进行操作。
 +
 +
<nowiki>>>> x = list(range(11))              #生成列表
 +
>>> import random
 +
>>> random.shuffle(x)                #打乱列表中元素顺序
 +
>>> x
 +
[0, 6, 10, 9, 8, 7, 4, 5, 2, 1, 3]
 +
>>> all(x)                          #测试是否所有元素都等价于True
 +
False
 +
>>> any(x)                          #测试是否存在等价于True的元素
 +
True
 +
>>> max(x)                          #返回最大值
 +
10
 +
>>> max(x, key=str)                  #按指定规则返回最大值
 +
9
 +
>>> min(x)
 +
0
 +
>>> sum(x)                    #所有元素之和
 +
55
 +
>>> len(x)                    #列表元素个数
 +
11
 +
>>> list(zip(x, [1]*11))      #多列表元素重新组合
 +
[(0, 1), (6, 1), (10, 1), (9, 1), (8, 1), (7, 1), (4, 1), (5, 1), (2, 1), (1, 1), (3, 1)]
 +
>>> list(zip(range(1,4)))    #zip()函数也可以用于一个序列或迭代对象
 +
[(1,), (2,), (3,)]
 +
>>> list(zip(['a', 'b', 'c'], [1, 2]))    #如果两个列表不等长,以短的为准
 +
[('a', 1), ('b', 2)]
 +
>>> enumerate(x)              #枚举列表元素,返回enumerate对象
 +
<enumerate object at 0x00000000030A9120>
 +
>>> list(enumerate(x))        #enumerate对象可以转换为列表、元组、集合
 +
[(0, 0), (1, 6), (2, 10), (3, 9), (4, 8), (5, 7), (6, 4), (7, 5), (8, 2), (9, 1), (10, 3)]
 +
</nowiki>

2020年3月22日 (日) 09:05的版本

列表的定义

列表是包含0个或多个元组组成的有序序列,属 于序列类型。列表可以元素进行增加、删除、替 换、查找等操作。列表没有长度限制,元素类型 可以不同,不需要预定义长度。

列表类型用中括号([])表示,也可以通过list(x) 函数将集合或字符串类型转换成列表类型

基础操作

创建列表

  • 使用“=”直接将一个列表赋值给变量即可创建列表对象。
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list = []                       #创建空列表
  • 也可以使用list()函数把元组、range对象、字符串、字典、集合或其他可迭代对象转换为列表。
>>> list((3,5,7,9,11))                #将元组转换为列表
[3, 5, 7, 9, 11]
>>> list(range(1, 10, 2))             #将range对象转换为列表
[1, 3, 5, 7, 9]
>>> list('hello world')               #将字符串转换为列表
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> list({3,7,5})                     #将集合转换为列表
[3, 5, 7]</nowiki>
  • 两个列表相加:
>>> ls =[1,2,3]

>>> lt =[4,5,6]

>>> ls = ls + lt
>>> print(ls)
[1, 2, 3, 4, 5, 6]

列表的索引

  • 创建列表之后,可以使用整数作为下标来访问其中的元素,其中0表示第1个元素,1表示第2个元素,2表示第3个元素,以此类推;列表还支持使用负整数作为下标,其中-1表示最后1个元素,-2表示倒数第2个元素,-3表示倒数第3个元素,以此类推。
>>> x = list('Python')             #创建类别对象
>>> x
['P', 'y', 't', 'h', 'o', 'n']
>>> x[0]                           #下标为0的元素,第一个元素
'P'
>>> x[-1]                          #下标为-1的元素,最后一个元素
'n'
  • Python6-2.png
  • 可以使用遍历循环对列表类型进行遍历操作
>>> x = list('Python')
       
>>> for i in x:
       print(i)

       
P
y
t
h
o
n

列表的切片

切片是列表的基本操作,用于获得列表的一个片 段,即获得一个或多个元素。

切片后的结果也是 列表类型。

切片有两种使用方式:

  • <列表或列表变量>[N: M] :获取从N到M(不包含M)的元素组成新 的列表。
  • <列表或列表变量>[N: M: K] :获取从N到M(不包 含M)以K为步长所对应元素组成的列


>>> ls = [1010,"1010",[1010,"1010"],1010]


>>> ls[1:4]
['1010', [1010, '1010'], 1010]
>>> ls[-1:-3]
[]


>>> ls[-3:-1]
['1010', [1010, '1010']]
>>> ls[0:4:2]
[1010, [1010, '1010']]


列表对象支持的运算符

加法运算符

  • 加法运算符+也可以实现列表增加元素的目的,但不属于原地操作,而是返回新列表,涉及大量元素的复制,效率非常低。使用复合赋值运算符+=实现列表追加元素时属于原地操作,与append()方法一样高效。
>>> x = [1, 2, 3]
>>> id(x)
53868168
>>> x = x + [4]                        #连接两个列表
>>> x
[1, 2, 3, 4]
>>> id(x)                              #内存地址发生改变
53875720
>>> x += [5]                           #为列表追加元素
>>> x
[1, 2, 3, 4, 5]
>>> id(x)                              #内存地址不变
53875720

乘法运算符

  • 乘法运算符*可以用于列表和整数相乘,表示序列重复,返回新列表。运算符*=也可以用于列表元素重复,属于原地操作。
>>> x = [1, 2, 3, 4]
>>> id(x)
54497224
>>> x = x * 2                           #元素重复,返回新列表
>>> x
[1, 2, 3, 4, 1, 2, 3, 4]
>>> id(x)                               #地址发生改变
54603912
>>> x *= 2                              #元素重复,原地进行
>>> x
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
>>> id(x)                               #地址不变

成员测试运算符in

  • 可用于测试列表中是否包含某个元素,查询时间随着列表长度的增加而线性增加,而同样的操作对于集合而言则是常数级的。
>>> 3 in [1, 2, 3]
True
>>> 3 in [1, 2, '3']
False

列表的操作函数

  • len(ls) 列表ls的元素个数(长度)
  • min(ls) 列表ls中的最小元素
  • max(ls) 列表ls中的最大元素
  • list(x) 将x转变成列表类型
>>> ls = [1010,"1010",[1010,"1010"],1010]
>>> len(ls)
4
>>> ls = [1010, 10.10, 0x1010]
>>> min(ls)
10.1
>>> lt = ["1010", "10.10", "Python"]
>>> max(lt)
'Python'
>>> ls = ls + lt
>>> print(ls)
[1010, 10.1, 4112, '1010', '10.10', 'Python']
>>> min(ls)
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    min(ls)
TypeError: '<' not supported between instances of 'str' and 'float'

列表的操作方法

列表的常用方法

  • Python6-3.png

append()、insert()、extend()

  • append()用于向列表尾部追加一个元素,insert()用于向列表任意指定位置插入一个元素,extend()用于将另一个列表中的所有元素追加至当前列表的尾部。这3个方法都属于原地操作,不影响列表对象在内存中的起始地址。
>>> x = [1, 2, 3]
>>> id(x)                           #查看对象的内存地址
50159368
>>> x.append(4)                     #在尾部追加元素
>>> x.insert(0, 0)                  #在指定位置插入元素
>>> x.extend([5, 6, 7])             #在尾部追加多个元素
>>> x
[0, 1, 2, 3, 4, 5, 6, 7]
>>> id(x)                           #列表在内存中的地址不变
50159368

pop()、remove()、clear()

  • pop()用于删除并返回指定位置(默认是最后一个)上的元素;remove()用于删除列表中第一个值与指定值相等的元素;clear()用于清空列表中的所有元素。这3个方法也属于原地操作。
  • 另外,还可以使用del命令删除列表中指定位置的元素,同样也属于原地操作。
>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> x.pop()                        #弹出并返回尾部元素
7
>>> x.pop(0)                       #弹出并返回指定位置的元素
1
>>> x.clear()                      #删除所有元素
>>> x
[]
>>> x = [1, 2, 1, 1, 2]
>>> x.remove(2)                    #删除首个值为2的元素
>>> del x[3]                       #删除指定位置上的元素
>>> x
[1, 1, 1]

count()、index()

  • 列表方法count()用于返回列表中指定元素出现的次数;index()用于返回指定元素在列表中首次出现的位置,如果该元素不在列表中则抛出异常。
>>> x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> x.count(3)                     #元素3在列表x中的出现次数
3
>>> x.count(5)                     #不存在,返回0
0
>>> x.index(2)                     #元素2在列表x中首次出现的索引
1
>>> x.index(5)                     #列表x中没有5,抛出异常
ValueError: 5 is not in list

sort()、reverse()

  • 列表对象的sort()方法用于按照指定的规则对所有元素进行排序;reverse()方法用于将列表所有元素逆序或翻转。
>>> x = list(range(11))                       #包含11个整数的列表
>>> import random
>>> random.shuffle(x)                         #把列表x中的元素随机乱序
>>> x
[6, 0, 1, 7, 4, 3, 2, 8, 5, 10, 9]
>>> x.sort(key=lambda item:len(str(item)), reverse=True)  #按转换成字符串以后的长度,降序排列
>>> x
[10, 6, 0, 1, 7, 4, 3, 2, 8, 5, 9]
>>> x.sort(key=str)                           #按转换为字符串后的大小,升序排序
>>> x
[0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.sort()                                  #按默认规则排序
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x.reverse()                               #把所有元素翻转或逆序
>>> x
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]


  • max()、min()函数用于返回列表中所有元素的最大值和最小值,
  • sum()函数用于返回列表中所有元素之和;
  • len()函数用于返回列表中元素个数,zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的zip对象;
  • enumerate()函数返回包含若干下标和值的迭代对象;
  • map()函数把函数映射到列表上的每个元素,filter()函数根据指定函数的返回值对列表元素进行过滤;
  • all()函数用来测试列表中是否所有元素都等价于True,any()用来测试列表中是否有等价于True的元素。
  • 标准库functools中的reduce()函数以及标准库itertools中的compress()、groupby()、dropwhile()等大量函数也可以对列表进行操作。
>>> x = list(range(11))              #生成列表
>>> import random
>>> random.shuffle(x)                #打乱列表中元素顺序
>>> x
[0, 6, 10, 9, 8, 7, 4, 5, 2, 1, 3]
>>> all(x)                           #测试是否所有元素都等价于True
False
>>> any(x)                           #测试是否存在等价于True的元素
True
>>> max(x)                           #返回最大值
10
>>> max(x, key=str)                  #按指定规则返回最大值
9
>>> min(x)
0
>>> sum(x)                    #所有元素之和
55
>>> len(x)                    #列表元素个数
11
>>> list(zip(x, [1]*11))      #多列表元素重新组合
[(0, 1), (6, 1), (10, 1), (9, 1), (8, 1), (7, 1), (4, 1), (5, 1), (2, 1), (1, 1), (3, 1)]
>>> list(zip(range(1,4)))     #zip()函数也可以用于一个序列或迭代对象
[(1,), (2,), (3,)]
>>> list(zip(['a', 'b', 'c'], [1, 2]))    #如果两个列表不等长,以短的为准
[('a', 1), ('b', 2)]
>>> enumerate(x)              #枚举列表元素,返回enumerate对象
<enumerate object at 0x00000000030A9120>
>>> list(enumerate(x))        #enumerate对象可以转换为列表、元组、集合
[(0, 0), (1, 6), (2, 10), (3, 9), (4, 8), (5, 7), (6, 4), (7, 5), (8, 2), (9, 1), (10, 3)]