从基础掌握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:表示序列名称;
start:切片开始位置,默认为0
end:切片截止位置,默认为序列的长度
step:切片步长,默认为1
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
  • 和序列相关的内置函数
函数 功能
len() 计算序列的长度,即返回序列中包含多少个元素。
max() 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min() 找出序列中的最小元素。
list() 将序列转换为列表。
str() 将序列转换为字符串。
sum() 计算元素和。
sorted() 对元素进行排序。
reversed() 反向序列中的元素。
enumerate() 将序列组合为一个索引序列,多用在 for 循环中。
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 = [元素1, 元素2, 元素3......]
name_list = ["ABC", "DEF", "GHI", "JKL"]
print(name_list)

结果:

['ABC', 'DEF', 'GHI', 'JKL']
  • 创建空列表
语法:em_name_list = [ ]
  • 创建数值列表
语法:list(data)
new_list = list(range(1, 10))
print(new_list)

结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 删除列表
语法:del name_list
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 面试必备:元组与列表的区别

  • 相同点:
①都属于序列;
②都可以按照特定顺序存放一组元素;
③类型不受限制。
  • 区别:
①列表属于可变序列,元素可以修改和删除;元组属于不可变序列,元素不可以修改,但可以替换;
②列表可以使用append()、extend()、insert()、remove()、pop()等方法,但是元组不能;
③列表可以使用切片,元组不行;
④元组比列表的访问和处理速度要快;
⑤列表不能作为字典的键值,但元组可以。

4 知识脑图

在这里插入图片描述

目录
相关文章
|
8天前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
WK
|
26天前
|
Python
python元组与列表的转换
在 Python 中,元组(tuple)和列表(list)是两种常用的数据结构,它们之间可以相互转换
WK
31 9
|
25天前
|
Python
探索Python中的列表推导式
【10月更文挑战第20天】在编程世界里,时间就是一切。Python的列表推导式是节约时间、简化代码的一大利器。本文将带你深入理解并有效利用这一强大工具,从基础到高级用法,让你的代码更加简洁高效。
|
25天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
19 7
|
25天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
WK
|
26天前
|
Python
Python创建元组
必须在这个元素后面加上一个逗号,否则 Python 会把它当作一个普通的带圆括号的表达式而不是元组
WK
15 4
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
24天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
24天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
14 1
|
24天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
16 1