Loading

Python数据类型之列表类型

Python中的列表(list)可以用来存储多个不同的数据类型,列表是有序可重复的,每个数据都有自己确切的位置,可以通过索引来获取指定的元素。

注意: 列表是可变数据类型。

创建列表

格式:

[数据1, 数据2, 数据3, ...]

示例:

# 创建空列表
# 方式1
list1 = []
# 方式2
list11 = list()
print(list11)  # []
print(type(list11))  # <class 'list'>

# 创建有数据的列表
list2 = [1, 2, 3, 4, 5, 6]

# 列表中存放不同的数据类型
list3 = [1, 2, "abc", 4, 5, True]
# 嵌套列表
list4 = [[1,2,3], True, 4]

列表元素的访问

对列表中的元素进行操作都需要通过索引来完成,索引可以理解为该元素在列表内所在的位置。索引从0开始,依次类推,注意不能超过索引范围。

name_list = ["tom", "jerry", "jack"]
print(name_list)  # ['tom', 'jerry', 'jack']

# 访问第一个元素
print(name_list[0])  # tom

# 访问第二个元素
print(name_list[1])  # jerry

# 访问第三个元素
print(name_list[2])  # jack

# 超出索引的范围就会报错
print(name_list[3])  # IndexError: list index out of range

# 嵌套列表元素的访问
name_list = [["tom", "jerry", "lisi"], ["张三", "李四", "王五"]]
print(name_list[1][2])  # 王五

列表的切片操作

列表切片,就是从列表中截取某一部分。

格式:

# start: 起始索引,end: 结束索引,step: 步长
列表序列[start:end:step]

注意: 切片的结果不包括end结束索引,也就是左闭右开,-1代表列表最后一个位置索引。

指定开始和结束索引

user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[0:3])  # ['小明', '小王', '小红']

# 索引可以为负数
print(user_list[1:-2]) # ['小王', '小红']

# 如果结束索引超出索引范围,则以列表长度作为索引。
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:8])  # ['小明', '小王', '小红', 'Tom', 'Jerry']

指定开始索引不指定结束索引

如果不指定结束索引,则列表会截取到末尾。

user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[2:])  # # ['小红', 'Tom', 'Jerry']

指定结束索引,不指定开始索引

如果不指定开始索引,则默认从索引0开始。

user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:2])  # ['小明', '小王']

指定切片步长

user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:4:2])  # ['小明', '小红']
print(user_list[-1:1:-1])  # ['Jerry', 'Tom', '小红']
print(user_list[::-1])  # ['Jerry', 'Tom', '小红', '小王', '小明']

修改列表元素的值

name_list = ["tom", "jerry", "jack"]
name_list[0] = "aaa"
print(name_list)  # ['aaa', 'jerry', 'jack']

列表中元素删除的操作

del

name_list = ["tom", "jerry", "jack"]
del name_list
print(name_list)  # NameError: name 'name_list' is not defined

# 删除指定位置的数据
name_list1 = ["toms", "jerrys", "jacks"]
del name_list1[1]
print(name_list1)  # ['toms', 'jacks']

# 使用切片的方式删除多个
name_list2 = ["tom", "jerry", "jack", "alis"]
del name_list2[0:3]
print(name_list2)  # ['alis']

pop()

删除指定下标的数据,如果不指定下标,默认删除最后一个数据,返回这个被删除的数据。

name_list = ["tom", "jerry", "jack"]
print(name_list.pop())  # jack
print(name_list)  # ['tom', 'jerry']

# 删除指定下标的数据
name_list1 = ["tom", "jerry", "jack"]
print(name_list1.pop(2))  # jack
print(name_list1)  # ['tom', 'jerry']

remove()

移除列表中指定值的第一个匹配项。

name_list = ["tom", "jerry", "jack", "jerry"]
name_list.remove("jerry")
print(name_list)  # ['tom', 'jack', 'jerry']

clear()

清空列表。

name_list = ["tom", "jerry", "jack", "jerry"]
name_list.clear()
print(name_list)  # []

列表常见的操作

in: 判断指定数据是否在列表中,如果在返回True,否则返回False。

name_list = ["tom", "jerry", "jack", "lisa"]
print("lisa" in name_list)  # True
print("jerrys" in name_list)  # False

not in: 判断指定数据是否不在列表中,如果不在返回True,否则返回False。

name_list = ["tom", "jerry", "jack", "lisa"]
print("toms" not in name_list)  # True
print("lisa" not in name_list)  # False

+: 组合列表

list1 = ["a", "b", "c"]
list2 = ["d", "e", "f"]
print(list1 + list2)  # ['a', 'b', 'c', 'd', 'e', 'f']

* 重复列表

list1 = ["a", "b"]
print(list1*3)  # ['a', 'b', 'a', 'b', 'a', 'b']

列表常见的方法

index()

返回指定数据在列表中第一次出现位置的下标。

语法:

列表序列.index(要查找的数据, 开始位置下标, 结束位置下标)

示例:

name_list = ["tom", "jerry", "jack", "jack"]
print(name_list.index("tom"))  # 0
print(name_list.index("jack"))  # 2

# 如果指定的元素不存在则抛出异常
print(name_list.index("toms"))  # ValueError: 'toms' is not in list

count()

统计指定数据在当前列表中出现的次数。

name_list = ["tom", "jerry", "jack"]
print(name_list.count("jerry"))  # 1

len()

返回列表的长度。

name_list = ["tom", "jerry", "jack"]
print(len(name_list))  # 3

append()

向列表末尾追加数据。

my_list = ["a", "b"]

# 追加一个元素
my_list.append("c")
print(my_list)  # ['a', 'b', 'c']

# 追加一个列表
my_list.append([1, 2])
print(my_list)  # ['a', 'b', 'c', [1, 2]]

extend()

向列表末尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表中。

name_list = ["tom", "jerry", "jack"]
name_list.extend("hello")
print(name_list)  # ['tom', 'jerry', 'jack', 'h', 'e', 'l', 'l', 'o']

name_list2 = ["tom", "jerry", "jack"]
name_list2.extend(["xiaoming", "xiaowang"])
print(name_list2)  # ['tom', 'jerry', 'jack', 'xiaoming', 'xiaowang']

insert()

向列表指定位置添加数据。

name_list = ["tom", "jerry", "jack"]
# name_list.insert(下标, 数据)
name_list.insert(1, "xiaowang")
print(name_list)  # ['tom', 'xiaowang', 'jerry', 'jack']

reverse()

反向列表中的元素。

list1 = [1 ,2 ,3 ,4 ,5]
list1.reverse()
print(list1)  # [5, 4, 3, 2, 1]

sort()

对列表进行排序。

语法:

列表序列.sort(key=None, reverse=False)

注:

reverse参数: 表示排序规则,reverse = True 降序, reverse = False 升序(默认)。

key参数: 指定在进行比较之前每个列表元素上要调用的函数,将函数的返回值作为比较的依据。

list1 = [1 ,3 ,4 ,2 ,5]
# 默认升序排序
list1.sort()
print(list1)  # [1, 2, 3, 4, 5]

# 指定为降序排序
list2 = [1 ,3 ,4 ,2 ,5]
list2.sort(reverse=True)
print(list2)  # [5, 4, 3, 2, 1]

# key参数示例
list3 = [(2, 3), (3, 1), (2, 2), (1, 4)]
list3.sort(key=lambda x: x[1])
print(list3)  # [(3, 1), (2, 2), (2, 3), (1, 4)]

copy()

复制列表。

name1 = ["tom", "jerry", "lisi"]
name2 = name1.copy()
print(name2)  # ['tom', 'jerry', 'lisi']

max()

获取列表的最大值

list1 = ["a", "b", "c", "d"]
print(max(list1))  # d

list2 = [1, 2, 3, 4, 5]
print(max(list2))  # 5

# max可以传入多个参数
print(max(1, 3, 5, 7))  # 7

min()

获取列表的最小值

list1 = ["a", "b", "c", "d"]
print(min(list1))  # a

list2 = [1, 2, 3, 4, 5]
print(min(list2))  # 1

# max可以传入多个参数
print(min(3, 5, 7, 9))  # 3

列表推导式

列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。

示例:

list1 = [i for i in range(10)]
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

带if条件的列表推导式:

list1 = [i for i in range(10) if i % 2 == 0]
print(list1)  # [0, 2, 4, 6, 8]

list2 = [0, 2, 3, -4, -6, 5]
list3 = [i for i in list2 if i >= 0]
print(list3)  # # [0, 2, 3, 5]

多个for的列表推导式:

list1 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list1)  # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

遍历列表

使用while循环

name_list = ["tom", "jerry", "lisi"]
i = 0
while i < len(name_list):
    print(name_list[i])
    i += 1

使用for循环

name_list = ["tom", "jerry", "lisi"]
for i in name_list:
    print(i)

使用for循环和range()

name_list = ["tom", "jerry", "lisi"]
for i in range(len(name_list)):
    print(name_list[i])

使用enumerate函数

enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列,可以获取数据及其索引。

语法:

enumerate(可遍历对象, start=0)

注: start参数用来设置遍历数据下标的起始值,默认是0

示例:

name_list = ["tom", "jerry", "lisi"]
for item in enumerate(name_list):
    print(item)
# 打印结果如下,元组类型
(0, 'tom')
(1, 'jerry')
(2, 'lisi')

for index, item in enumerate(name_list):
    print(index, item)
# 打印结果如下
0 tom
1 jerry
2 lisi

使用iter()内置函数

name_list2 = ["tom", "jerry", "jack", "alis"]
for i in iter(name_list2):
    print(i)

使用推导式

name_list = ["tom", "jerry", "lisi"]
[print(x) for x in name_list]
posted @ 2021-04-25 21:10  charlatte  阅读(409)  评论(0编辑  收藏  举报