day06-列表
列表 (List)
是一种有序、可变且允许重复元素的数据结构列表中的每个元素均会分配一个数字,用以记录位置,我们称之为
索引 (Indexes)
,索引值从 0 开始,依次往后计数。列表使用中括号
[ ]
,元素之间使用逗号,
分隔,其元素可以是数字、字符串、列表等其他任何数据类型。1、创建列表
使用括号
[ ]
创建list = [1, 2, 3, 4, 5] # 创建包含整数元素的列表 list = ["1", "2", "3", "4", "5"] # 创建包含字符串元素的列表 list = [{}, {}] # 创建包含字典元素的列表 list = [(1, 2, 3), (4, 5, 6)] # 创建包含元组的列表 list = [True, False] # 创建包含布尔值的列表 list = [1, "2", {"a": 1}, (2), True] # 创建包含不同类型元素的列表
使用
list()
函数创建list()
是一个内置函数,用于将可迭代对象转换为列表。其中,可迭代对象可以是字符串、元组、集合、字典等。
list()
函数将可迭代对象的每个元素收集起来,并返回一个新的列表。string = "Hello" my_list = list(string) # 将字符串转换为列表 my_tuple = (1, 2, 3) my_list = list(my_tuple) # 将元组转换为列表 my_set = {1, 2, 3} my_list = list(my_set) # 将集合转换为列表 my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = list(my_dict) # 将字典的键转换为列表
2、列表的运算
符号
|
说明
|
+
|
列表连接
|
*
|
重复元素
|
in/not in
|
成员判断
|
= != > <
|
列表比较
|
加号运算符
+
可以将两个列表连接成一个新的列表。list1 = [1, 2, 3] list2 = [4, 5, 6] print(list1 + list2) # 输出结果 [1, 2, 3, 4, 5, 6]
乘号运算符
*
可以将列表重复指定次数my_list = [1, 2, 3] print(my_list * 3) # 输出结果 [1, 2, 3, 1, 2, 3, 1, 2, 3]
使用关键字
in
和 not in
可以判断元素是否存在于列表中list = [1, 2, 3, 4, 5] print(3 in list) # 输出:True print(2 not in list) # 输出:False
列表可以进行比较运算符的比较,包括等于(
==
)、不等于(!=
)、大于(>
)、小于(<
)、大于等于(>=
)、小于等于(<=
)list1 = [1, 2, 3] list2 = [1, 2, 3] print(list1 == list2) # 输出:True print(list1 != list2) # 输出:False print(list1 > list2) # 输出:False print(list1 < list2) # 输出:False
3、列表切片
在字符串中我们也讲了字符串的切片,大致是一样的,我们可以通过下标获取列表的某个元素
# 列表切片 list = [1, 2, 3, 4, 5] # 一共6个字符 print(list[0]) # 取第1个字符 print(list[1]) # 取第2个字符 print(list[5]) # 取第6个字符 print(list[-1]) # 取倒数第1个元素 print(list[-3]) # 取倒数第4个元素 # 输出结果 1 2 IndexError: list index out of range 5 3
取不到元素时会报:索引越界
my_list[start:end:step]
start
:切片的起始索引(包含),默认为 0。end
:切片的结束索引(不包含),默认为列表的长度。step
:切片的步长(可选),表示每次取元素的间隔,默认为 1。
对了,如果我们在切片操作中,如果不指定起始位置,默认为索引0(列表的开头)。如果不指定终止位置,默认为列表的长度(列表的结尾),列表的长度可以用len(list)来得到
my_list = [1, 2, 3, 4, 5] print(my_list[:]) # 取全部元素 print(my_list[0:]) # 取全部元素 print(my_list[:len(my_list)]) # 取全部元素 print(my_list[2:]) # 取第3个元素之后的所有元素 print(my_list[-4:]) # 取倒数第4个元素到结尾的所有元素 print(my_list[1:5]) # 取第2个元素到第4个元素 print(my_list[0:-3]) # 取第1个元素到倒数第3个元素 print(my_list[1:-1]) # 取第2个元素到倒数第2个元素 # 输出结果 [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [3, 4, 5] [2, 3, 4, 5] [2, 3, 4, 5] [1, 2] [2, 3, 4]
高级的例子
my_list = [1, 2, 3, 4, 5,6] print(my_list[::1]) # 取全部元素 print(my_list[::-1]) # 倒序取所有元素 print(my_list[::2]) # 取所有元素,每两个取一个 print(my_list[1:6:2]) # 取第2个字符到第5个元素,每两个取一个 # 输出结果 [1, 2, 3, 4, 5] [5, 4, 3, 2, 1] [1, 3, 5] [2, 4]
有个思考,我们通过切片后的列表跟原来的列表还有关系吗?
我们来验证下:
my_list = [1, 2, 3, 4, 5, 6] my_list2 = my_list[::1] # 取全部元素 print(my_list, id(my_list)) print(my_list2, id(my_list2)) # 输出结果 [1, 2, 3, 4, 5, 6] 2311174617984 [1, 2, 3, 4, 5, 6] 2311175950144
如果不查看内存地址,发现真的是一模一样,其实切片后的列表和原始列表是完全独立的,它们是两个不同的列表对象
4、列表的基本函数
函数名 |
含义 |
len(list)
|
返回列表的元素个数
|
max(list)
|
返回列表中最大的元素
|
min(list)
|
返回列表中最小的元素
|
my_list = [1, 4, 3, 11, 7, 8, 15] print(len(my_list)) # 返回列表长度 print(max(my_list)) # 返回列表最大值 print(min(my_list)) # 返回列表最小值 # 输出结果 7 15 1
是不是感觉很简单
但是我举一个例子,让你知道max()函数其实不一般
max()
函数的语法和参数如下:max(iterable, *[, key, default])
iterable
:表示可迭代对象,例如列表、元组、字符串等。key
(可选):表示一个函数,用于指定比较的关键字。默认为None
,表示直接比较元素的大小。default
(可选):表示当可迭代对象为空时,返回的默认值。如果不提供该参数,并且可迭代对象为空,则会引发ValueError
。
大体意思是如果我们并设置key参数,默认按照字典顺序比较元素的大小,如果我们设置了key参数
key=len
参数,其中 len
是一个内置函数。len()
函数用于获取字符的个数,就是我们使用元素的长度来进行比较我们接下来做几个简单的编程题熟悉一下
1、有该列表
my_list = [10, 20, 30, 40, 50]
,求该列表的所有元素的平均值2、有该列表
["apple", "banana", "orange", "kiwi"]
,求列表中最长的字符串,并返回其长度第一题我们思路应该是先求出各个元素的和,然后在求出元素的个数,相除就可以了
my_list = [10, 20, 30, 40, 50] print(sum(my_list) / len(my_list)) # 返回列表元素的平均值
第二题我们正常思路可能都是把列表里的每个字符串循环输出,然后求每个字符串的长度作比较,然后取出最长的字符串,那现在我们用max函数试一下
my_list = ["apple", "bananana", "orange", "kiwi"] print(max(my_list)) # 输出结果 orange
输出结果是orange,但是从我们肉眼来看,明明是bananana,所以这样比较是有错的,列表里的元素是字符串,不是整数,而我们max函数默认是按照字典顺序比较的,如果我们想让字符串长度比较,需要在max函数中指定
key=len
参数,我们告诉 max()
函数按字符串的长度进行比较my_list = ["apple", "bananana", "orange", "kiwi"] print(max(my_list,key=len)) # 输出结果 bananana
5、列表的常用函数
在之前写过一篇Python的列表函数篇列表函数,可以快速查找我们需要的函数
函数名 |
|
含义 |
追加&&拓展&&插入
|
list.append(element)
|
在列表末尾添加一个元素
|
list.extend(iterable)
|
在列表末尾追加可迭代对象中的所有元素
|
|
list.insert(index, element)
|
在指定索引位置插入一个元素
|
|
修改
|
list[索引] = 要修改的值
|
通过下标直接修改
|
删除
|
list.remove(element)
|
移除列表中第一个匹配的指定元素
|
list.pop(index=-1)
|
移除并返回指定索引位置的元素。如果未提供索引,则默认移除并返回最后一个元素
|
|
list.clear()
|
移除列表中的所有元素,使其变为空列表
|
|
统计个数
|
list.count(element)
|
返回指定元素在列表中出现的次数
|
获取元素下标
|
list.index(element, start=0, end=len(list))
|
返回列表中第一个匹配指定元素的索引。
|
排序&&翻转&&复制
|
list.sort(key=None, reverse=False)
|
对列表进行排序,可以指定排序关键字和是否降序排序
|
list.reverse()
|
反转列表中的元素顺序
|
|
list.copy()
|
返回列表的一个浅拷贝副本
|
搞懂每个函数的作用,然后多加练习
追加&&拓展&&插入
# 追加 list = [1, 2, 3, 4, 5] list.append(6) print(list) # 拓展 list = [1, 2, 3, 4, 5] list.extend([6, 7, 8, 9]) print(list) # 插入 list = [1, 2, 3, 4, 5] list.insert(0, 0) print(list) # 输出结果 [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5]
修改
# 修改 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list[0] = 100 print(list) # 输出结果 [100, 2, 3, 4, 5, 6, 7, 8, 9, 10]
删除
# 移除指定元素 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1] list.remove(1) print(list) # 移除了第一个1 # 根据下标移除元素 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1] print(list.pop(4)) # 根据下标去除元素,会有返回值 print(list) # 移除所有元素 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1] list.clear() print(list) # 输出结果 [2, 3, 4, 5, 6, 7, 8, 9, 1] 5 [1, 2, 3, 4, 6, 7, 8, 9, 1] []
统计个数
# 列表统计个数 list = [10, 2, 3, 4, 5, 10, 7, 8, 9, 10] print(list.count(10)) # 输出结果 3
获取元素下标
# 列表获取元素下标 list = [10, 2, 3, 4, 5, 10, 7, 8, 9, 10] print(list.index(10)) # 元素多个,只返回第一个元素的下标0
排序&&翻转&&复制
# 列表排序 list = [1, 3, 2, 5, 4] list.sort() print(list) # 列表反转 list = [1, 3, 2, 5, 4] list.reverse() print(list) # 列表复制 list = [1, 3, 2, 5, 4] list1 = list.copy() print(list1)
day06练习
初级
1.声明一个空的list
2.声明一个列表,包含姓名、年龄、身高、是否毕业、住址的元素
3.计算2题中列表的长度
4.获取2题中列表的第一、中间、最后一个列表项
中级
1.声明一个列表为
my_company = ['xiaomi', 'huawei', 'vivo', 'oppo', 'apple', 'samsung', 'meizu']
1) 打印输出列表
my_company
2) 获取列表
my_company
的长度3) 分别输出列表
my_company
的第一、中间、最后公司名4) 更改列表
my_company
的列表项'xiaomi'
为'hongmi'
5) 追加
iqoo
到my_company
中6) 新增
releme
到my_company
中间的位置7)选择
my_company
中的'vivo'改为全部大写8)使用 '-' 字符将
my_company
的列表数据全部连接起来9) 判断'oppo'是否存在于
my_company
列表中10)对
my_company
列表进行排序,升序和降序11) 对
my_company
列表进行翻转12) 获取
my_company
列表的前三项13) 获取
my_company
列表的后三项14) 移除
my_company
列表的第一个元素15) 移除
my_company
列表的中间元素16) 移除
my_company
列表的最后的一个元素17) 移除
my_company
列表的全部元素18) 删除
my_company
列表19) 将
new_company = ['alibaba', 'tenxun', 'baidu']
合并到my_company
列表中,输出打印新列表高级
1.有该列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,求该列表元素偶数的个数2.有该列表
[8, 9, 10, 6, 7, 4, 8, 2, 1, 4]
,使用排序求出该列表的最大值和最小值3.有该列表
[1, 2, 3, 2, 4, 3, 5, 6, 1]
,输出该列表中唯一元素,追加到一个新的空列表中