编程学习网 > 编程语言 > Python > python列表教程(Python列表用法总结)
2023
06-17

python列表教程(Python列表用法总结)

本期将Python中列表涉及的从基础到进阶用法,全部总结归纳,一起看看吧


首先讲讲列表的创建,定义空列表可以使用如下两种方式

list1 = []
list2 = list()

print(list1, list2)

>>> [] []
在中括号内输入元素即完成了非空列表的创建,由逗号隔开不同元素

list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
list3 = [True, False]

print(list1)
print(list2)
print(list3)

>>> ['a', 'b', 'c']
>>> [1, 2, 3]
>>> [True, False]
需要注意的是,列表中的元素可以重复,可以是不同类型

list1 = [1, 1, 1]
list2 = ['a', 'a', 'a']
list3 = ['a', True, 250]

print(list1)
print(list2)
print(list3)

>>> [1, 1, 1]
>>> ['a', 'a', 'a']
>>> ['a', True, 250]
如果想初始化n个相同元素的列表,无需手敲,可以直接使用如下便捷方式

list1 = [5] * 10

print(list1)

>>> [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
该操作也同样适用于不同维度列表,但一般多维数组有其他更强大的库代替,此时应该有同学站起来抢答Numpy

list1 = [1, 2, 3] * 2
list2 = [[1, 1], [2, 2]] * 2

print(list1)
print(list2)

>>> [1, 2, 3, 1, 2, 3]
>>> [[1, 1], [2, 2], [1, 1], [2, 2]]
使用list结合range完成列表的创建是使用频率相当高的一种方式

list1 = list(range(10))

print(list1)

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
需要注意的是,如果使用list结合字符串,输出会变成如下形式

list1 = list("Hi bilibili")

print(list1)

>>> ['H', 'i', ' ', 'b', 'i', 'l', 'i', 'b', 'i', 'l', 'i']
列表中嵌套列表,完成多层级矩阵创建,且子列表无需保持长度一致

list1 = [[1, 1], [2, 2]]
list2 = [[1], [2, 2], [3, 3, 3]]

print(list1)
print(list2)

>>> [[1, 1], [2, 2]]
>>> [[1], [2, 2], [3, 3, 3]]
讲完了创建,再来讲讲索引,使用正数表示从左至右取元素值,从0开始表示最左边元素,以此类推,即最右边元素为列表长度减一

list1 = [1, 2, 3, 4, 5]

first = list1[0]
last = list1[5-1]
print(first, last)

>>> 1 5
同样可以使用负数表示从右至左取值,但注意此时从-1开始表示最右边元素

list1 = [1, 2, 3, 4, 5]

first = list1[-1]
last = list1[-5]
print(first, last)

>>> 5 1
如果索引超出范围[0, length(list)-1],则会抛出IndexError

list1 = [1, 2, 3, 4, 5]

data = list1[5]

>>> Traceback (most recent call last):
  File "script.py", line 5, in <module>
    data = list1[5]
IndexError: list index out of range

Exited with error status 1
修改相应位置元素可以在取出索引时直接赋值

list1 = [1, 2, 3, 4, 5]

list1[0] = 0
print(list1)

>>> [0, 2, 3, 4, 5]
搭配冒号:可以实现更多索引切片玩法,取列表中某一段元素值使用如下方式,注意左闭右开,seg1表示取从左至右第一个元素至第三个元素,seg2表示取从左至右第三个元素至第五个元素

list1 = [1, 2, 3, 4, 5]

seg1 = list1[0:3]
seg2 = list1[2:5]
print(seg1, seg2)

>>> [1, 2, 3] [3, 4, 5]
而该例子通常会写成如下形式

list1 = [1, 2, 3, 4, 5]

seg1 = list1[:3] # 适用于从初始位置开始的切片
seg2 = list1[2:] # 适用于以末尾位置结束的切片
print(seg1, seg2)

>>> [1, 2, 3] [3, 4, 5]
同样的适用于负数,但通常不这么做,也不建议这样

list1 = [1, 2, 3, 4, 5]

seg1 = list1[-3:-1]

print(seg1)

>>> [3, 4]
使用双冒号::实现隔值索引,该例表示从索引位置1开始每两个位置取值

list1 = list(range(20))

seg1 = list1[1::2]

print(seg1)

>>> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
同样适用于负数,值得一提的是,双冒号搭配-1起到列表翻转的作用

list1 = list(range(20))

seg1 = list1[::-1]

print(seg1)

>>> [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
对于列表某段元素,也支持全部重新赋值

list1 = [1, 2, 3, 4, 5, 6]

list1[:3] = 'a', 'b', 'c'
list1[3:] = 'abc'

print(list1)

>>> ['a', 'b', 'c', 'a', 'b', 'c']
然后再来讲讲列表元素的增加,使用append实现列队尾元素直接插入,效率高

list1 = [1, 2, 3, 4, 5]

list1.append(6)

print(list1)

>>> [1, 2, 3, 4, 5, 6]
也支持多元素插入

list1 = [1, 2, 3, 4, 5]

list1.append([6, 7, 8])

print(list1)

>>> [1, 2, 3, 4, 5, [6, 7, 8]]
使用insert实现各位置任意插入,如在索引为2的位置插入88,但insert方法会带来列表移动,效率低,非必要尽量不用

list1 = [1, 2, 3, 4, 5]

list1.insert(2,88) # 在索引为2的位置插入88

print(list1)

>>> [1, 2, 88, 3, 4, 5]
使用extend方法实现列表的拼接,比如前述append例子想在末尾插入多个元素,而结果却是嵌套列表,此时extend就派上用场

list1 = [1, 2, 3, 4, 5]

list1.extend([6, 7, 8])

print(list1)

>>> [1, 2, 3, 4, 5, 6, 7, 8]
同样的,也可使用+号完成拼接,但该方式效率低,建议使用内置方法append与extend

list1 = [1, 2, 3, 4, 5]

list1 += [6, 7, 8]

print(list1)

>>> [1, 2, 3, 4, 5, 6, 7, 8]
讲完增加,再讲删除,使用del实现根据索引值删除元素

list1 = [1, 2, 3, 4, 5]

del list1[0]

print(list1)

>>> [2, 3, 4, 5]
也可以直接删除整个列表

list1 = [1, 2, 3, 4, 5]

del list1

print(list1)

>>> Traceback (most recent call last):
  File "script.py", line 7, in <module>
    print(list1)
NameError: name 'list1' is not defined

Exited with error status 1
使用pop删除指定索引位置元素,若未指定,默认删除最后一个元素

list1 = [1, 2, 3, 4, 5]

list1.pop()

print(list1)

list1.pop(0)

print(list1)

>>> [1, 2, 3, 4]
>>> [2, 3, 4]
使用remove删除指定元素值,通常在不确定索引只确定值的情况下使用

list1 = [1, 2, 3, 4, 5]

list1.remove(4)

print(list1)

>>> [1, 2, 3, 5]
特别注意,remove方法只删除第一个匹配的元素

list1 = [1, 2, 3, 3, 5]

list1.remove(3)

print(list1)

>>> [1, 2, 3, 5]
此外,若列表中不存在该指定值会引发 ValueError 错误

list1 = [1, 2, 3, 3, 5]

list1.remove(4)

print(list1)

>>> Traceback (most recent call last):
  File "script.py", line 5, in <module>
    list1.remove(4)
ValueError: list.remove(x): x not in list

Exited with error status 1
使用clear清空列表内容,而保留列表本身,这点与前述del有所区别,通常用于循环结构中,无需额外创建新列表,节省资源

list1 = [1, 2, 3, 4, 5]

list1.clear()

print(list1)

>>> []
讲完了增加与删除,还有其他方法,使用index返回某元素在列表中的位置索引,若出现多次,则返回第一次出现的位置索引

list1 = [1, 2, 3, 4, 5]

idx = list1.index(4)

print(idx)

>>> 3
使用count统计列表中某元素出现次数

list1 = [1, 4, 4, 4, 5]

num = list1.count(4)

print(num)

>>> 3
使用sort完成列表排序

list1 = [-1, -5, 4, 2, 5]

list1.sort()

print(list1)

list1.sort(reverse=True)

print(list1)

>>> [-5, -1, 2, 4, 5]
>>> [5, 4, 2, -1, -5]
使用reverse完成列表反转

list1 = [1, 2, 3, 4, 5]

list1.reverse()

print(list1)

>>> [5, 4, 3, 2, 1]
需特别注意的是,clear(), insert(), sort(), reverse(), remove(), extend(), append()是无返回值的,很容易出错写成如下形式

list1 = [1, 2, 3, 4, 5]

list1 = list1.append(6)

print(list1)

>>> None
再是Python支持的用于列表的内置函数,使用len返回列表长度

list1 = [1, 2, 3, 4, 5]

num = len(list1)

print(num)

>>> 5
使用min返回列表中最小元素

list1 = [1, 2, 3, 4, 5]

data = min(list1)

print(data)

>>> 1
使用max返回列表中最大元素

list1 = [1, 2, 3, 4, 5]

data = max(list1)

print(data)

>>> 5
然后说说列表的拷贝,如下展示的是错误的拷贝方式,打印会发现原始数据得到了改变

list1 = [1, 2, 3, 4, 5]

list2 = list1

list2.pop()

print(list1, list2)

>>> [1, 2, 3, 4] [1, 2, 3, 4]
可以使用列表推导式进行拷贝

list1 = [1, 2, 3, 4, 5]

list2 = [i for i in list1]

list2.pop()

print(list1, list2)

>>> [1, 2, 3, 4, 5] [1, 2, 3, 4]
也可以使用内置方法copy进行拷贝

list1 = [1, 2, 3, 4, 5]

list2 = list1.copy()

list2.pop()

print(list1, list2)

>>> [1, 2, 3, 4, 5] [1, 2, 3, 4]
再就是列表的解包,比如这个例子,如果你使用这种方式

list1 = [1, 2, 3]

first = list1[0]
second = list1[1]
third = list1[2]

print(first, second, third)

>>> 1 2 3
就会显得很小白,可以直接这样

list1 = [1, 2, 3]

first, second, third = list1

print(first, second, third)

>>> 1 2 3
接下来是重点,如果列表元素过多,而仅需要前几位,可以这样

list1 = list(range(20))

first, second, *other = list1

print(first, second)
print(other)

>>> 0 1
>>> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
你以为这就完事了吗,还可以这样

list1 = list(range(20))

first, *other, last = list1

print(first, last)
print(other)

>>> 0 19
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
这样

list1 = list(range(20))

*other, penultimate, last = list1

print(penultimate, last)
print(other)

>>> 18 19
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
再说说列表的遍历,通常使用循环直接遍历列表

list1 = ["one", "two", "three"]

for i in list1:
    print(i)

>>> one
two
three
如果需要用到位置索引,更好的方式是使用enumerate

list1 = ["one", "two", "three"]

for data in enumerate(list1):
    print(data)

>>> (0, 'one')
(1, 'two')
(2, 'three')
也就是说enumerate每次返回打包好的相应元素及其位置索引,前述才讲解完解包,可理解为返回的data如下

list1 = ["one", "two", "three"]

# for data in enumerate(list1):
#     print(data)
data = [0, "one"]
index, item = data
所以通常写成如下形式

list1 = ["one", "two", "three"]

for index, item in enumerate(list1):
    print(index, item)

>>> 0 one
1 two
2 three
如果要判断某元素是否存在于列表中,可以使用如下简单方式

list1 = ["one", "two", "three"]

if "two" in list1:
    print(True)

>>> True
最后,关于列表推导式,举三个例子,掌握后即可用于绝大部分场景,第一个,目的是想构造一个新列表,而列表中的元素为原先的两倍

list1 = [1, 2, 3, 4, 5, 6]
list2 = []

for item in list1:
        list2.append(item * 2)
print(list2)

>>> [2, 4, 6, 8, 10, 12]
而使用列表推导式可以写成如下形式

list1 = [1, 2, 3, 4, 5, 6]
list2 = [i * 2 for i in list1]

print(list2)
>>> [2, 4, 6, 8, 10, 12]
第二个例子,程序的目的是过滤列表中的偶数

list1 = [1, 2, 3, 4, 5, 6]
list2 = []

for item in list1:
    if item % 2 == 1:
        list2.append(item)
print(list2)

>>> [1, 3, 5]
使用列表推导式则写成如下形式

list1 = [1, 2, 3, 4, 5, 6]
list2 = [i for i in list1 if i % 2 == 1]

print(list2)
>>> [1, 3, 5]
第三个,程序的目的是将两个列表中的元素进行打包

list1 = [1, 2, 3, 4]
list2 = ["a", "b", "c", "d"]
list3 = []

for item1 in list1:
    for item2 in list2:
        list3.append((item1, item2))
print(list3)

>>> [(1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (2, 'a'), (2, 'b'), (2, 'c'), (2, 'd'), (3, 'a'), (3, 'b'), (3, 'c'), (3, 'd'), (4, 'a'), (4, 'b'), (4, 'c'), (4, 'd')]
改写成列表推导式如下

list1 = [1, 2, 3, 4]
list2 = ["a", "b", "c", "d"]
list3 = [(item1, item2) for item1 in list1 for item2 in list2]

print(list3)

>>> [(1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (2, 'a'), (2, 'b'), (2, 'c'), (2, 'd'), (3, 'a'), (3, 'b'), (3, 'c'), (3, 'd'), (4, 'a'), (4, 'b'), (4, 'c'), (4, 'd')]
以上就是python列表教程(Python列表用法总结)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取