详解Python列表和元组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Python列表和元组相关的知识,希望对你有一定的参考价值。
(详解Python的列表和元组)
1 序列
- 序列是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
- Python序列结构主要有列表、元组、集合、字典和字符串;
1.1 索引
- 序列中,每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从 0 开始递增。也可以为负数即从右到左计数;
- 也可以为负数即从右到左计数;
name = ["zhangsan", "lisi", "wangwu"]
print(name[0])
print(name[2])
print(name[-1])
结果:
zhangsan
wangwu
wangwu
1.2 切片
- 语法:name[start : end : step]
name = ["火影", "鸣人", "佐助", "小樱"]
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(name[0:2])
print(name[0:2:1])
print(num[0:9:2])
print(name[:])
print(name)
结果:
[火影, 鸣人]
[火影, 鸣人]
[1, 3, 5, 7, 9]
[火影, 鸣人, 佐助, 小樱]
[火影, 鸣人, 佐助, 小樱]
1.3 序列相加
- 两个序列类型必须相同
- 相加即将两个序列进行连接
- 使用 “ + ” 即可
num_str = ["1", "2", "3", "4", "5"]
num = [1, 2, 3, 4, 5]
name_str = ["路飞", "索洛", "乔巴", "山治", "娜美"]
num_new = num + num_str
print(num_new)
name_str_new = name_str + num_str
print(name_str_new)
结果:
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
[路飞, 索洛, 乔巴, 山治, 娜美, 1, 2, 3, 4, 5]
- 不同类型的序列不能相加,比如列表和元组
num_str = ["1", "2", "3", "4", "5"]
num = (1, 2, 3, 4, 5)
num_new = num + num_str
print(num_new)
结果:
Traceback (most recent call last):
File "F:/python_study/main.py", line 6, in <module>
num_new = num + num_str
TypeError: can only concatenate tuple (not "list") to tuple
1.4 乘法
- 使用数字n乘以一个序列会生成一个新的序列,表示原序列重复n次
mi = ["我是米粉", "我是忠实的米粉"]
mi_new = mi * 3
print(mi_new)
结果:
[我是米粉, 我是忠实的米粉, 我是米粉, 我是忠实的米粉, 我是米粉, 我是忠实的米粉]
- 还可以初始化序列的长度
mi = [None] * 3
print(mi)
结果:
[None, None, None]
1.5 检查某个元素是不是序列的成员(元素)
- 使用关键字in检查元素是不是序列的成员
phone = ["mate9", "mate10", "mate20", "mate30", "mate40"]
print("mate40" in phone)
print("mate40pro" in phone)
结果:
True
False
- 使用not in检查是否不包含的关系
phone = ["mate9", "mate10", "mate20", "mate30", "mate40"]
print("p40pro" not in phone)
print("p40pro" in phone)
结果:
True
False
1.6 计算序列的长度、最大值和最小值
- max()返回序列中的最大元素,min()返回最小值,len()返回序列的长度
num = [10, 20, 30, 40, 50, 60]
print(max(num))
print(min(num))
print(len(num))
结果:
60
10
6
- 和序列相关的内置函数
num = [20, 60, 40, 30, 50, 10]
num_new = sorted(num)
print(sum(num))
print(num)
print(sorted(num))
结果:
210
[20, 60, 40, 30, 50, 10]
[10, 20, 30, 40, 50, 60]
内容很多,我得坚持。。。。
2 列表
- python中的内置可变序列
- 使用“ [ ] ”把元素括起来,相邻元素使用“ , ”隔开
2.1 列表的创建和删除
- 使用赋值运算符直接创建列表
name_list = ["ABC", "DEF", "GHI", "JKL"]
print(name_list)
结果:
[ABC, DEF, GHI, JKL]
- 创建空列表
- 创建数值列表
new_list = list(range(1, 10))
print(new_list)
结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
- 删除列表
new_list = list(range(1, 10))
print(new_list)
del new_list
print(new_list)
结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Traceback (most recent call last):
File "F:/python_study/main.py", line 7, in <module>
print(new_list)
NameError: name new_list is not defined
2.2 访问列表元素
- 结合print()函数和角标进行配合使用
new_list = ["小学生", "初中生", "高中生", "大学生"]
print(new_list)
print(new_list[3])
print(new_list[0])
结果:
[小学生, 初中生, 高中生, 大学生]
大学生
小学生
2.3 遍历列表
- 使用for循环实现
new_list = ["小学生", "初中生", "高中生", "大学生"]
for student in new_list:
print(student)
结果:
小学生
初中生
高中生
大学生
- 使用for循环和enumerate()函数实现,可同时输出元素内容和索引的值
new_list = ["小学生", "初中生", "高中生", "大学生"]
for index, item in enumerate(new_list):
print(index, item)
结果:
0 小学生
1 初中生
2 高中生
3 大学生
2.4 添加、修改和删除列表元素
- 添加元素 ① name_list.append(元素) :在列表末尾追加
my_list = ["小学生", "初中生", "高中生", "大学生"]
my_list.append("研究生")
print(my_list)
结果:
[小学生, 初中生, 高中生, 大学生, 研究生]
②name_list.extend(new_name_list):将new_name_list中的元素全部添加到name_list中
name_list = ["小学生", "初中生", "高中生", "大学生"]
new_name_list = ["小学", "中学", "高中", "大学"]
print(name_list)
name_list.extend(new_name_list)
print(name_list)
结果:
[小学生, 初中生, 高中生, 大学生]
[小学生, 初中生, 高中生, 大学生, 小学, 中学, 高中, 大学]
- 修改元素: 配合角标使用
num = [1, 2, 3, 4, 5]
print(num)
num[0] = 11
num[4] = 55
print(num)
结果:
[1, 2, 3, 4, 5]
[11, 2, 3, 4, 55]
- 删除元素 ①根据索引删除,使用del:
num = [1, 2, 3, 4, 5]
print(num)
del num[0]
print(num)
结果:
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
②根据元素值删除,使用remove:
num = [1, 2, 3, 4, 5]
print(num)
num.remove(1)
print(num)
结果:
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
2.5 对列表进行统计计算
- 获取指定元素出现的次数
- 获取指定元素首次出现的下标
- 统计数值列表的元素和
# -*- coding:utf-8 -*-
# 使用count()方法获取指定元素出现的次数
num = [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(num.count(1))
# 使用index()方法获取指定元素首次出现的下标
print(num.index(3))
# 使用sum()计算数值列表元素的和
print(sum(num))
结果:
3
2
18
2.6 对列表进行排序
- sort()方法 ①语法:name_list.sort(key=None, reverse=False) ②说明:key提取一个用于比较的键,reverse为True表示降序,为False表示升序
num = [1, 2, 3, 1, 2, 3, 1, 2, 3]
print("原序列:", num)
num.sort(reverse=False)
print("升序排列:", num)
num.sort(reverse=True)
print("降序排列:", num)
结果:
原序列: [1, 2, 3, 1, 2, 3, 1, 2, 3]
升序排列: [1, 1, 1, 2, 2, 2, 3, 3, 3]
降序排列: [3, 3, 3, 2, 2, 2, 1, 1, 1]
- 使用sorted()方法 ①语法:sorted(list_name, key=None, reverse=False) ②说明:listname是列表名称,key为指定的规则,reverse为True表示降序,为False表示升序
# -*- coding:utf-8 -*-
num = [1, 2, 3, 1, 2, 3, 1, 2, 3]
print("原序列:", num)
new_num = sorted(num, reverse=False)
print("升序排列:", new_num)
new_num_l = sorted(num, reverse=True)
print("降序排列:", new_num_l)
结果:
原序列: [1, 2, 3, 1, 2, 3, 1, 2, 3]
升序排列: [1, 1, 1, 2, 2, 2, 3, 3, 3]
降序排列: [3, 3, 3, 2, 2, 2, 1, 1, 1]
2.7 列表推导式
- 生成指定范围的数值列表
- 生成指定需求的列表
- 列表中选择符合条件的元素组成新的列表
# -*- coding:utf-8 -*-
import random
# 生成指定范围的数值列表
num = [random.randint(10, 50) for i in range(20)]
print("1、随机取10到50中20个数字放到num列表中:", num)
# 生成指定需求的列表
mm = 1
num_list = [mm+i for i in range(10)]
print("2、给变量mm每次加i,循环10次:", num_list)
# 列表中选择符合条件的元素组成新的列表
zz = [20, 30, 40, 50, 60, 70, 80, 90, 100]
new_zz = [j for j in zz if j > 60]
print("3、原序列:", zz)
print("4、取大于60后新的序列:", new_zz)
结果:
1、随机取10到50中20个数字放到num列表中: [21, 43, 48, 40, 14, 34, 35, 28, 45, 11, 33, 33, 19, 26, 18, 23, 17, 37, 39, 27]
2、给变量mm每次加i,循环10次: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3、原序列: [20, 30, 40, 50, 60, 70, 80, 90, 100]
4、取大于60后新的序列: [70, 80, 90, 100]
3 元组
- 元组是不可变序列
- 使用“( )”括起来,元素间用逗号隔开
3.1 元组的创建和删除
- 直接使用赋值运算符创建元组
- 创建空元组
- 创建数值元组
- 删除元组
# -*- coding:utf-8 -*-
# 创建空元组
name = ()
print("这是空元组:", name)
# 直接使用赋值运算符创建元组
name_new = ("laoli", "xiaozhang", "laowang")
print("创建元组:", name_new)
# 创建数值元组
num = tuple(range(1, 10, 2))
print("创建数值元组:", num)
# 删除元组
del num
print("删除num元组:", num)
结果:
这是空元组: ()
创建元组: (laoli, xiaozhang, laowang)
创建数值元组: (1, 3, 5, 7, 9)
Traceback (most recent call last):
File "F:/python_study/main.py", line 17, in <module>
print("删除num元组:", num)
NameError: name num is not defined
3.2 访问元组元素
- 结合print()和下标
# -*- coding:utf-8 -*-
num = (1, 2, 3, 4, 5, 6, 7, 8)
print(num[0], num[7])
print(num[-1:])
结果:
1 8
(8,)
3.3 修改元组元素
- 元组是不可变序列,不能修改单个元素,重新赋值生成新的元组
# -*- coding:utf-8 -*-
num = (1, 2, 3, 4, 5, 6, 7, 8)
num1 = (9, 10)
num2 = num + num1
print(num2)
结果:
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
3.4 元组推导式
- 同列表类似,使用推导式可以快速生成一个元组(不再赘述)
3.5 面试必备:元组与列表的区别
- 相同点:
- 区别:
4 知识脑图
以上是关于详解Python列表和元组的主要内容,如果未能解决你的问题,请参考以下文章