列表是 python中最常用的容器类型之一,它是可变的,有序的,并且可以包含不同类型的元素。
使用[]
字面量语法来定义列表,列表中的多个元素用逗号进行分隔
# 创建列表
my_list = [1, 2, 3, 'apple', 'banana']
# 访问元素
print(my_list[0]) # 输出: 1
# 修改元素
my_list[1] = 10
print(my_list) # 输出: [1, 10, 3, 'apple', 'banana']
# 添加元素
my_list.append('cherry')
print(my_list) # 输出: [1, 10, 3, 'apple', 'banana', 'cherry']
# 删除元素
del my_list[2]
print(my_list) # 输出: [1, 10, 'apple', 'banana', 'cherry']
此外还可以通过 python 内置函数list
将其他序列变成列表
items1 = list(range(1, 10))
items2 = list('hello')
print(items1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(items2) # ['h', 'e', 'l', 'l', 'o']
+
运算符+
运算符可以实现对两个列表的拼接,会将两个列表中的元素连接起来放到一个列表中
items1 = [35, 12, 99, 45, 66]
items2 = [45, 58, 29]
items3 = ['Python', 'Java', 'JavaScript']
print(items1 + items2) # [35, 12, 99, 45, 66, 45, 58, 29]
print(items2 + items3) # [45, 58, 29, 'Python', 'Java', 'JavaScript']
items1 += items2
print(items1) # [35, 12, 99, 45, 66, 45, 58, 29]
*
运算符*
运算符实现列表的重复运算,*
运算符会将列表元素重复指定的次数
# 借用上面的 + 运算符的列表
print(items2 * 3) # [45, 58, 29, 45, 58, 29, 45, 58, 29]
print(items3 * 2) # ['Python', 'Java', 'JavaScript', 'Python', 'Java', 'JavaScript']
in
和not in
运算符使用in
或not in
运算符判断一个元素在不在列表中
print(29 in items2) # True
print(99 in items2) # False
print('C++' not in items3) # True
print('Python' not in items3) # False
列表中有多个元素,而且元素是按照特定顺序放在列表中的,当想操作列表中的某个元素时,可以使用[]
运算符,通过在[]
中指定元素的位置来访问该元素,这种运算称为索引运算。需要说明的是,[]
的元素位置可以是0
到N - 1
的整数,也可以是-1
到-N
的整数,分别称为正向索引和反向索引,其中N
代表列表元素的个数。对于正向索引,[0]
可以访问列表中的第一个元素,[N - 1]
可以访问最后一个元素;对于反向索引,[-1]
可以访问列表中的最后一个元素,[-N]
可以访问第一个元素,代码如下所示。
items4 = ["apple","waxberry","pitaya","peach","watermelon"]
print(items4[0]) # apple
print(items4[2]) # pitaya
print(items4[4]) # watermelon
items4[2] = 'durian'
print(items4) # ['apple', 'waxberry', 'durian', 'peach', 'watermelon']
print(items4[-5]) # 'apple'
print(items4[-4]) # 'waxberry'
print(items4[-1]) # watermelon
items4[-4] = 'strawberry'
print(items4) # ['apple', 'strawberry', 'durian', 'peach', 'watermelon']
在使用索引运算的时候要避免出现索引越界的情况,对于上面的
items4
,如果我们访问items4[5]
或items4[-6]
,就会引发IndexError
错误,导致程序崩溃,对应的错误信息是:list index out of range,翻译成中文就是“数组索引超出范围”。因为对于只有五个元素的列表items4
,有效的正向索引是0
到4
,有效的反向索引是-1
到-5
。
如果要一次性访问列表中的多个元素,可以使用切片运算。切片运算是形如[start:end:stride]
的运算符,其中start
代表访问列表元素的起始位置,end
代表访问列表元素的终止位置(终止位置的元素无法访问),而stride
则代表了跨度,简单的说就是位置的增量,比如我们访问的第一个元素在start
位置,那么第二个元素就在start + stride
位置,当然start + stride
要小于end
。我们给上面的代码增加下面的语句,来使用切片运算符访问列表元素。
print(items4[1:3:1]) # ['strawberry', 'durian']
print(items4[0:3:1]) # ['apple', 'strawberry', 'durian']
print(items4[0:5:2]) # ['apple', 'durian', 'watermelon']
print(items4[-4:-2:1]) # ['strawberry', 'durian']
print(items4[-2:-6:-1]) # ['peach', 'durian', 'strawberry', 'apple']
如果 start
值等于0
,那么使用切片运算时可以省略;如果end
值等于N
,N
代表列表元素的个数,在使用切片运算可以省略;如果stride
值等于1
,那么在使用切片运算时也可以省略
print(items4[1:3]) # ['strawberry', 'durian']
print(items4[:3:1]) # ['apple', 'strawberry', 'durian']
print(items4[::2]) # ['apple', 'durian', 'watermelon']
print(items4[-4:-2]) # ['strawberry', 'durian']
print(items4[-2::-1]) # ['peach', 'durian', 'strawberry', 'apple']
items4[1:3] = ['x', 'o']
print(items4) # ['apple', 'x', 'o', 'peach', 'watermelon']
列表之间可以做关系运算,可以比较两个列表是否相等和比较大小
nums1 = [1,2,3,4]
nums2 = [list(range(1,5))]
nums3 = [3,2,1]
print(nums1 == nums2) # True
print(nums1 != nums2) # False
print(nums1 <= nums3) # True
print(nums2 >= nums3) # False
在 python 中如果想要取出列表中的元素,可以使用for-in
循环
在循环结构中通过索引运算,遍历列表元素
languages = ['Python', 'Java', 'C++', 'Kotlin']
for index in range(len(languages)):
print(languages[index])
输出:
Python
Java
C++
Kotlin
上面使用
len
函数可以获取列表元素的个数N
,而range(N)
则相当于从0
到N-1
的范围,刚好可以作为列表元素的索引
直接对列表做循环,循环变量就是列表元素
languages = ['Python', 'Java', 'C++', 'Kotlin']
for language in languages:
print(language)
输出:
Python
Java
C++
Kotlin
列表是一种可变容器,可变容器是指可以对容器中的元素进行增删改查
append
:append 方法可以在列表最后添加元素
列表.append(要添加的元素)
insert
:insert 方法可以在列表中指定位置插入新元素
列表.insert(插入的位置,要插入的元素)
extend
:extend 方法可以将一个可迭代对象(列表,元组等)的元素添加到列表的末尾
列表1.extend(列表2)
languages = ['Python', 'Java', 'C++']
languages.append('JavaScript')
print(languages) # ['Python', 'Java', 'C++', 'JavaScript']
languages.insert(1, 'SQL')
print(languages) # ['Python', 'SQL', 'Java', 'C++', 'JavaScript']
languages2 = ["red","blue","yellow"]
languages.extend(languages2)
print(languages) # ['Python', 'SQL', 'Java', 'C++', 'JavaScript','red','blue','yellow']
remove
:remove方法会移除列表中匹配的第一个元素,如果元素不在,会抛出ValueError
异常
列表.remove(要移除的元素)
pop
:用于移除并返回指定索引位置的元素。如果不指定索引,默认移除并返回最后一个元素
列表.pop(要删除的元素)
clear
:用于清空列表中的所有元素。
列表.clear()
languages = ['Python', 'SQL', 'Java', 'C++', 'JavaScript']
if 'Java' in languages:
languages.remove('Java')
if 'Swift' in languages:
languages.remove('Swift')
print(languages) # ['Python', 'SQL', C++', 'JavaScript']
languages.pop()
temp = languages.pop(1)
print(temp) # SQL
languages.append(temp)
print(languages) # ['Python', C++', 'SQL']
languages.clear()
print(languages) # []
index
:用于返回指定元素在列表中第一次出现的索引。如果元素不存在,会抛出 ValueError 异常。
索引 = 列表.index(要查找的元素)
count
:用于统计指定元素在列表中出现的次数
出现的次数 = 列表.count(要统计的元素)
in
:关键字可用于检查元素是否存在于列表中,它会返回一个布尔值
if 要检查的元素 in 列表
items = ['Python', 'Java', 'Java', 'C++', 'Kotlin', 'Python']
print(items.index('Python')) # 0
# 从索引位置1开始查找'Python'
print(items.index('Python', 1)) # 5
print(items.count('Python')) # 2
print(items.count('Kotlin')) # 1
print(items.count('Swfit')) # 0
# 从索引位置3开始查找'Java'
print(items.index('Java', 3)) # ValueError: 'Java' is not in list
if "C++" in items:
print("C++"存在于列表中)
else:
print("C++"不存在于列表中)
sort
:用于对列表进行排序,默认是升序排序。可以通过 reverse=True
参数实现降序排序。
列表.sort(reverse=True)
reverse
:用于反转列表中的元素顺序。
列表.reverse()
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
items = ['Python', 'Java', 'C++', 'Kotlin', 'Swift']
items.reverse()
print(items) # ['Swift', 'Python', 'Kotlin', 'Java', 'C++']