Published in:2024-10-24 |

列表

一、什么是列表

列表(list)是Python常用的一个数据类型,用于存储多个连续的有序的数据

  • 存储多个值
  • 数据是连续的
  • 有序
  • 允许有重复的元素
  • 可以存储相同类型的数据 n = [2,4,6,8,22]
  • 也可以存储不同类型的数据 n = [2,4,’six’,8,22]

为什么要使用列表:

  • 存储多个值
  • a = 2 b = 4 c = 6 d = 8 e = 22 麻烦
  • n = [2,4,6,8,22]

二、如何创建列表

  • 创建普通列表:

    列表中的元素的类型是相同的

1
2
n = [2,4,6,8,22]   # 列表是用中括号/方括号表示,元素之间用逗号分隔
n = [2,4,6,8,22,]
  • 创建混合列表

    列表中的元素是不同类型的

1
2
n = [1,2,'c',4,5]  # 不建议这么使用
print(n)
  • 创建一个空列表
1
empty = [] # 空列表
  • 工厂函数
1
2
3
4
5
6
7
t1 = list()   # 构造函数   空列表   # a = int(5)

# 使用可迭代对象构造一个列表
t2 = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(t2)
t3 = list("helloworld") # ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
print(t3)

三、访问列表中的元素

列表中的每一个数据项称为列表的元素,列表中的元素是有顺序,在列表中每一个元素都有一个编号,来记录元素在列表中的位置,这个编号默认是从0开始,到n-1(其中n表示元素的个数),这个编号称之为下标或索引(index)

程序员的世界,标号一般都是从0开始

访问列表中的元素: 列表名[索引]

1
2
3
4
n = [2,4,6,8,22]
print(n[0],n[1])

print(n[5]) # IndexError: list index out of range 下标越界
1
2
3
4
5
6
7
8
9
10
# 遍历列表中的元素
for i in n:
print(i)

# 第一个元素是x
# 第二个元素是x
counter = 1
for i in n:
print('第'+str(counter)+'个元素是:'+str(i))
counter += 1
  • 交换列表中的两个元素的值

    1
    2
    n = [2, 4, 6, 8, 22]
    n[1],n[2] = n[2],n[1]

四、修改列表中的元素

1
2
3
n = [2, 4, 6, 8, 22]
a = n[0]
print(a, n[1]) # 把n[0]赋值给a或直接打印n[0] 把元素作为右值 获取它的值

如果要修改列表中的元素值,就是将它作为左值:

1
2
n[0] = 3
print(n)

五、添加列表元素

  • append()方法

    • 作用:向列表最后添加一个元素
    • 形式: L.append(object)
    1
    2
    3
    letters = ['a','b','c']
    letters.append('d') # 函数、类和对象
    print(letters) # => ['a','b','c','d']
  • insert()函数

    • 作用:在指定位置插入元素
    • 形式:L.insert(index, object)
    1
    2
    3
    letters = ['a','b','c']
    letters.insert(0,'A')
    print(letters) # ['A','a','b','c']
  • extend()函数

    • 作用:向一个列表中扩展另一个列表(将一个列表中的元素添加到另一个列表中)
    • 形式:L.extend(iterable)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    l1 = ['a','b','c']
    l2 = ['x','y','z']
    # for l in l2:
    # l1.append(l)
    l1.extend(l2)
    print(l1)

    l1.extend("Helloworld") # ['a', 'b', 'c', 'H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
    print(l1)

面试题:

​ 实现列表去重: [2,4,6,4,8,22,6,30]

1
2
3
4
5
6
7
8
9
1.   set( [2,4,6,4,8,22,6,30] )   # 集合不允许有重复的元素   -- 打乱顺序

2.
numbers = [2, 4, 6, 4, 8, 22, 6, 30]
empty = []
for n in numbers:
if n not in empty: # not in / in
empty.append(n)
print(empty)

判断列表中是否存在某个元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
numbers = [2, 4, 6, 4, 8, 22, 6, 30]
n = int(input('请输入一个数:'))
if n in numbers:
print(n,'在列表中')
else:
print(n,'不在列表中')

# flag = True
# for i in numbers:
# if n == i:
# flag = False
# print(n,'在列表中')
# break
#
# if flag:
# print(n,'不在列表中')

六、删除列表中的元素

  • remove()函数

    • 作用:移除列表中的一个已存在的元素,如果值不存在则抛出异常-出错
    • 形式:L.remove(value)
    1
    2
    3
    numbers = [2,4,6,8,22]
    numbers.remove(2)
    print(numbers) # =>[4,6,8,22]
    1
    2
    3
    4
    # 删除一个不存在的元素
    numbers = [2,4,6,8,22]
    numbers.remove(3)
    print(numbers) # ValueError: list.remove(x): x not in list
  • pop()函数

    • 作用:移除列表中的最后一个元素或者指定位置的元素,并返回被移除的元素
    • 形式:L.pop([index] - 可选)
    1
    2
    3
    4
    numbers = [2,4,6,8,22]
    item = numbers.pop() # 移除最后一个元素
    print(numbers) # [2,4,6,8]
    print(item) # 22
    1
    2
    3
    4
    5
    6
    item = numbers.pop(1)
    print(item) # 4
    print(numbers) # [2, 6, 8]

    # 如果下标越界 则 出错
    item = numbers.pop(100) # IndexError: pop index out of range
  • clear()函数

    • 作用: 清空列表中的所有元素
    • 形式:L.clear()
    1
    2
    3
    numbers = [2,4,6,8,22]
    numbers.clear()
    print(numbers) #=> []
  • del 操作符

    • 作用:删除列表中的某个元素
    • 形式:del n[0]
    1
    2
    3
    numbers = [2,4,6,8,22]
    del numbers[0]
    print(numbers)

七、列表操作符

  • 合并列表
1
2
3
4
a = [1,2,3]
b = [4,5,6]
c = a + b
print(c)
  • 重复操作符
1
2
3
a = [1,2,3]
print(a*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# print("*"*3)
  • 成员操作符
    • in 操作符 : 判断某个元素是否在某个列表中
    • not in 操作符
1
2
3
4
5
a = [1,2,3]
print(1 in a)

if 2 in a:
pass

八、列表切片

切片:截取列表中的部分元素

1
2
3
4
a = ['A', 'B', 'C', 'D', 'E', 'F']
print(a[1],a[2],a[3])
b = [a[1],a[2],a[3]]
print(b)
  • 切片: a[start:stop:step]
1
2
3
4
5
6
7
8
9
10
11
12
a = ['A', 'B', 'C', 'D', 'E', 'F']
b = a[1:4] # 表示从下标1开始到3 不包括4
print(b) # ['B', 'C', 'D']

c = a[1:] # 表示从下标1开始到结尾
print(c) # ['B', 'C', 'D', 'E', 'F']

d = a[:5] # 默认从0开始 到下标4
print(d) # ['A', 'B', 'C', 'D', 'E']

e = a[:] # 默认从0开始到最后 -- 拷贝
print(e) # ['A', 'B', 'C', 'D', 'E','F']
  • 切片支持负数:
1
2
3
4
5
6
7
8
9
a = ['A', 'B', 'C', 'D', 'E', 'F']
b = a[-2] # 下标支持负数
print(b)

c = a[-2:] # 从倒数第二个到结尾
print(c) # ['E', 'F']

d = a[:-1] # 从0开始到最后一个的前一个 取不到最后一个
print(d)
  • 切片时指定第三个参数
1
2
3
a = ['A', 'B', 'C', 'D', 'E', 'F']
b = a[::2] # 第三个参数表示步长
print(b)
1
2
3
4
5
6
a = ['A', 'B', 'C', 'D', 'E', 'F']
b = a[::-1] # ['F', 'E', 'D', 'C', 'B', 'A'] # 第三个参数为负数
print(b)

c = a[5:2:-1]
print(c) # ['F', 'E', 'D']

九、常用的函数和方法

  • 在Python中提供了一些全局函数来直接操作列表

    • max()函数
    1
    2
    n = [2,4,6,8,22]
    print(max(n)) # 返回列表中的最大值
    • min()函数
    1
    2
    n = [2,4,6,8,22]
    print(min(n)) # 返回列表中的最小值
    • len()函数
    1
    2
    3
    4
    5
    6
    7
    n = [2,4,6,8,22]
    print(len(n)) # 返回列表的元素的个数-长度 length


    n = [2,4,6,8,22]
    for i in range(len(n)):
    print('第'+str(i+1)+'个值为:',n[i])
    • sum()函数
    1
    2
    3
    4
    5
    6
    7
    8
    a = [1,2,3,4,5]
    print(sum(a))

    l = list(range(101))
    print(sum(l)) # 计算1-100以内的所有整数和

    l = list(range(1,100,2)) # 计算1-100以内的所有奇数和
    print(sum(l))
  • 列表中的其它方法

    • list.count(item) : 统计item元素出现的次数
    1
    2
    n = [2,4,6,4,8,4,22]
    print(n.count(4)) # 3
    • list.index(item):返回item元素第一次出现的位置
    1
    2
    n = [2,4,6,4,8,4,22]
    print(n.index(4)) # 1
    • list.reverse():反转列表 修改原列表而不是生成一个新的列表
    1
    2
    3
    n = [1,2,3,4,5,7]
    n.reverse()
    print(n) # [7, 5, 4, 3, 2, 1]
    • list.sort():对原列表排序
    1
    2
    3
    4
    5
    6
    n = [1,5,3,7,2,8,100,40]
    n.sort()
    print(n) # [1, 2, 3, 5, 7, 8, 40, 100] 升序

    n.sort(reverse=True)
    print(n) # [100, 40, 8, 7, 5, 3, 2, 1] 降序

十、二维列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 一维列表
a = [1,2,3]

# 二维列表:的每一个元素都是一个一维列表
a = [[1,2,3],[4,5,6]]
print(a[0]) # => [1,2,3]

# 元素的访问
print(a[0][1])

# 二维列表的遍历
a = [[1,2,3],[4,5,6]]
for i in a:
for j in i:
print(j)
  • 列表推导式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = [0,1,2,3]
a = list(range(4))
a = [i for i in range(4)]
print(a)

a = [i*2 for i in range(4)] # [0, 2, 4, 6]
print(a)

# 二维列表
b = [[1,2] for j in range(3)]
print(b)

b = [[i for i in range(4)] for j in range(3)]
print(b)

b = [[i*j for i in range(4)] for j in range(3)]
print(b)
Prev:
Next: