Python List
List列表
- 内置可变序列。如果没有给出参数,构造函数会创建一个新的空列表。如果指定,参数必须是可迭代的。
list
是可变序列,通常用于存储同类项的集合(其中精确的相似度因应用程序而异)。
可以通过多种方式构造列表:
- 使用一对方括号表示空列表:
[]
- 使用方括号,用逗号分隔项目:
[a]
,[a, b, c ]
- 使用列表推导式:
[x for x in iterable]
- 使用类型构造函数:
list()
或list(iterable)
- 构造函数构建一个列表,其项目与可迭代的项目相同且顺序相同。
iterable
可以是一个序列、一个支持迭代的容器或一个迭代器对象。 - 如果
iterable
已经是一个列表,则创建并返回一个副本,类似于iterable[:]
。 例如,list('abc')
返回['a', 'b', 'c']
并且list( (1, 2, 3) )
返回[1, 2, 3]
。 如果没有给出参数,构造函数会创建一个新的空列表[]
列表创建
>>> list.__doc__
'''Built-in mutable sequence.
If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.'''
>>> list([1, 2, 3])
[1, 2, 3]
>>> names = ["fyz", "yjk", "xhr", "zc"]
>>> list([i.upper() for i in names])
['FYZ', 'YJK', 'XHR', 'ZC']
list和array的不同之处
- list中的数据类型不必相同的,而array的中的类型必须全部相同
- 在list中的数据类型保存的是数据的存放的地址,并非数据
- Python 没有内置对数组的支持,但可以使用 Python 列表List代替。
List操作方法
元素添加
-
array.append(x)
将值为x
的新项追加到列表的末尾。 -
array.extend(iterable)
将iterable
中的项目追加到列表的末尾。 如果iterable
是另一个列表,它必须具有完全相同的类型代码; 如果没有,则会引发TypeError
。 如果iterable
不是列表,则它必须是可迭代的,并且其元素必须是要附加到列表的正确类型。 -
array.insert(i, x)
在列表中的位置i
之前插入一个值为x
的新项。 负值被视为相对于列表的末尾。
>>> array = ['a', 'b', 1, 2]
>>> array.append(3)
['a', 'b', 1, 2, 3]
>>> array.extend(["c", 'd'])
>>> array
['a', 'b', 1, 2, 3, 'c', 'd']
>>> array.insert(5,4)
['a', 'b', 1, 2, 3, 4, 'c', 'd']
元素获取
array[index]
返回列表中索引index
的值(可以为负数表示反向取值)array.index(x)
返回最小的i
,使得i
是列表中第一次出现x
的索引,可以指定查找范围,未找到则报错array.count(x)
返回列表中x
出现的次数
>>> array = ['a', 'b', 'c', 'd']
>>> array[0]
'a'
>>> array[-1]
'd'
>>> array.index('c')
2
>>> array.index('c',0,2)
ValueError: 'c' is not in list
>>> array.count('b')
1
# 随机选中
>>> import random
>>> random.choice(array)
'a'
元素删除
-
array.pop([i])
从列表中移除索引为i
的项目并返回它。 可选参数默认为 -1,因此默认情况下删除并返回最后一项。 -
array.remove(x)
从列表中删除第一个出现的x
。 -
array.clear()
列表清空
>>> array = ['a', 'b', 'c', 'd']
>>> array.pop(-1)
'd'
>>> array.remove("c")
>>> array
['a', 'b']
>>> array.clear()
[]
>>> del array
>>> array
NameError: name 'array' is not defined
列表切片
-
array[[start]:[stop]]
从列表中拷贝索引从start
到stop
的元素,取前不取后 [start
,stop
),默认从两端
>>> array = ['fyz', 'yjk', 'xhr', 'zc']
>>> array[:2]
['fyz', 'yjk']
>>> array[2:]
['xhr', 'zc']
>>> array[:] #列表拷贝等效于 array.copy()
['fyz', 'yjk', 'xhr', 'zc']
-
array
[start, stop[, step]]
>>> array = ['fyz', 'yjk', 'xhr', 'zc']
>>> array[::-1] #等效于逆序
['zc', 'xhr', 'yjk', 'fyz']
>>> array[0:3:2]
['fyz', 'xhr']
>>> del array[0:3:2] #del 切片可以作用于原始列表
>>> array
['yjk', 'zc']
-
array.copy()
返回字典的浅拷贝。 -
array.clear()
从字典中删除所有项目。
>>> array = ['zc', 'xhr', 'yjk', 'fyz']
>>> array2 = array.copy()
['zc', 'xhr', 'yjk', 'fyz']
>>> array.clear()
>>> print(f"array:{array},array2:{array2}")
array:[],array2:['zc', 'xhr', 'yjk', 'fyz']
列表排序
sorted(iterable, key=None, reverse=False)
从iterable
中的项目返回一个新的排序列表。
有两个可选参数,必须指定为关键字参数。
key
指定一个带一个参数的函数,用于从iterable
中的每个元素中提取比较键(例如,key=str.lower
)。 默认值为None
(直接比较元素)。reverse
是一个布尔值。 如果设置为True
,则对列表元素进行排序,就好像每次比较都颠倒了一样
array.reverse()
反转列表中项目的顺序。array.sort
(function, key, reverse)
-
function
为排序算法,默认为归并排序 -
key
为关键字 -
reverse
默认值为False,表示不倒序排序
>>> array = ['fyz', 'yjk', 'xhr', 'zc']
>>> sorted(array)
['fyz', 'xhr', 'yjk', 'zc']
>>> array.sort(reverse = True)
>>> array
['zc', 'yjk', 'xhr', 'fyz']
>>> array.reverse()
['fyz', 'xhr', 'yjk', 'zc']
列表运算
>>> array = ['fyz', 'yjk', 'xhr', 'zc']
>>> "fyz" in array
True
>>> "yjk" not in array
False
>>> lista = [1,3]
>>> listb = [2,1]
>>> lista <= listb #仅比较第一个元素
True
>>> listc = lista + listb
>>> listc
[1, 3, 2, 1]
>>> array * 2
['fyz', 'yjk', 'xhr', 'zc', 'fyz', 'yjk', 'xhr', 'zc']