Python List

List列表

  • 内置可变序列。如果没有给出参数,构造函数会创建一个新的空列表。如果指定,参数必须是可迭代的。
  • list是可变序列,通常用于存储同类项的集合(其中精确的相似度因应用程序而异)。

可以通过多种方式构造列表:

  1. 使用一对方括号表示空列表:[]
  2. 使用方括号,用逗号分隔项目:[a],[a, b, c ]
  3. 使用列表推导式:[x for x in iterable]
  4. 使用类型构造函数: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]]从列表中拷贝索引从startstop的元素,取前不取后 [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']