Python列表(list)是有序、可变的序列,用中括号写成,元素类型可以混用,也能再嵌套列表。创建之后可以按下标改值,也可以增删元素。
下标和切片的规则与字符串相近,但列表允许原地修改,这是两者最大的差别之一。
先建一个列表
fruits = ["apple", "mango", "orange"]
print(fruits) # ['apple', 'mango', 'orange']
print(fruits[0]) # apple
print(len(fruits)) # 3创建列表
a = [1, 2, 3]
b = ["apple", 3.14, True, "x"] # 混合类型
c = [] # 空列表
d = [["a", 1], ["b", 2]] # 嵌套列表
print(a, b, c)下标与切片
正下标从 0 起,负下标从右边数,切片同样含头不含尾:
nums[0] 是 10,nums[-1] 是 50;nums[1:4] 取 [20, 30, 40](含头不含尾)。
nums = [10, 20, 30, 40, 50]
print(nums[0]) # 10
print(nums[-1]) # 50
print(nums[1:4]) # [20, 30, 40]
print(nums[::-1]) # [50, 40, 30, 20, 10],反转
修改元素
直接按下标赋值即可,切片位置也可以一次性换成另一段序列:
nums = [1, 2, 3]
nums[0] = 99
print(nums) # [99, 2, 3]
nums[1:3] = [8, 8] # 切片也能赋值
print(nums) # [99, 8, 8]添加元素
fruits = ["apple"]
fruits.append("banana") # 末尾加一个
print(fruits) # ['apple', 'banana']
fruits.insert(1, "orange") # 指定位置插入
print(fruits) # ['apple', 'orange', 'banana']
fruits.extend(["kiwi", "grape"]) # 末尾加多个
print(fruits) # ['apple', 'orange', 'banana', 'kiwi', 'grape']删除元素
nums = [1, 2, 3, 4, 5]
nums.remove(3) # 按值删第一个匹配项
print(nums) # [1, 2, 4, 5]
popped = nums.pop() # 删除并返回末尾元素
print(popped, nums) # 5 [1, 2, 4]
nums.pop(0) # 删除指定下标
print(nums) # [2, 4]
del nums[0] # del 也能删
print(nums) # [4]遍历列表
nums = [3, 1, 4, 1, 5]
for n in nums:
print(n, end=" ") # 3 1 4 1 5
print()
# 需要下标时用 enumerate
for i, n in enumerate(nums):
print(f"index={i}, value={n}")成员判断与排序
nums = [5, 2, 9, 1]
print(2 in nums) # True
print(nums.index(9)) # 2,9 的下标
nums.sort() # 原地升序
print(nums) # [1, 2, 5, 9]
nums.reverse() # 原地反转
print(nums) # [9, 5, 2, 1]
# sorted 返回新列表,不改原列表
original = [3, 1, 2]
new = sorted(original)
print(original, new) # [3, 1, 2] [1, 2, 3]复制列表的常见误区
b = a 只是让两个名字指向同一份列表,改一边另一边也会变,需要独立副本时用 copy() 或切片 a[:]:
a = [1, 2, 3]
b = a # 不是复制,是别名
b.append(4)
print(a) # [1, 2, 3, 4] a 也变了
c = a.copy() # 真正的浅拷贝
c.append(5)
print(a, c) # [1, 2, 3, 4] [1, 2, 3, 4, 5]综合练一练
循环读入用户输入的数字存进列表,输入 0 结束,最后输出总和、最大值,以及去重后的列表。