Python-Basic Day-2 python容器(列表、元组)

一、引言

在Python中,列表和元组是两种最常用的序列类型,它们看似相似却有着本质区别。方括号[]创建的列表是可变的 ,允许动态增删元素;而圆括号()创建的元组是不可变的,一旦创建便无法修改。这种差异决定了它们的不同用途:列表用于需要频繁操作的数据集合,元组则适用于保持数据完整性和作为字典键等场景。

二、列表

2.1 列表的创建

python 复制代码
# 1.创建空列表 - 两种等效方法
empty_list = []       # 使用方括号
empty_list2 = list()  # 使用list()构造函数

# 2.创建包含元素的列表
fruits = ['apple', 'banana', 'orange', 'grape']  # 字符串列表
numbers = [1, 2, 3, 4, 5]                        # 整数列表
mixed = [1, 'hello', 3.14, True]                 # 混合类型列表

# 3.从其他数据类型创建列表
from_string = list("hello")      # 将字符串转换为字符列表
>>> ['h', 'e', 'l', 'l', 'o']

from_range = list(range(5))      # 将range对象转换为列表
>>> [0, 1, 2, 3, 4]

tuple1 = ("cat", "dog", "bird")  # 将元组转换为列表
tuple_to_list = list(tuple1)
>>> ['cat', 'dog', 'bird']

# 4.列表推导式创建列表
# [略](https://juejin.cn/post/7562113701395906594)

语法格式:list(iterable)

参数iterable:可选参数,指 "可迭代对象"(比如字符串、元组、字典、集合、range 对象等)

2.2 列表的访问

Python列表支持索引和切片操作,可以方便地访问和获取子列表。

python 复制代码
fruits = ["apple", "banana", "orange", "grape", "mango"]

# 1.索引访问 [offset]
print("第一个元素:", fruits[0])
print("最后一个元素:", fruits[-1])

# 2.切片操作访问 [start:end:step]
print("前三个:", fruits[0:3])
print("从第三个到最后:", fruits[2:])
print("所有元素:", fruits[:])
print("反转列表:", fruits[::-1])

2.3 列表的增删查改

列表是可变的,这意味着我们可以修改、添加或删除其中的元素。

python 复制代码
fruits = ["apple", "banana", "orange"]

'''1.修改元素 - 通过索引直接赋值'''
fruits[1] = "blueberry"
print(fruits)  # 输出: ['apple', 'blueberry', 'orange']

'''2.添加元素 - 三种方法'''
# 2.1 append()在列表末尾添加单个元素
fruits.append("grape")  
print(fruits)  # 输出: ['apple', 'blueberry', 'orange', 'grape']

# 2.2 insert()在指定位置插入单个元素
fruits.insert(1, "cherry") 
print(fruits)  # 输出: ['apple', 'cherry', 'blueberry', 'orange', 'grape']

# 2.3 extend()或 += 在末尾添加(多个)元素
fruits.extend(["mango", "pineapple"])  # 与 fruits += ["mango", "pineapple"] 效果相同
print(fruits)  # 输出: ['apple', 'cherry', 'blueberry', 'orange', 'grape', 'mango', 'pineapple']

'''3.删除元素 - 四种基本方法'''
# 3.1 pop()删除并返回最后一个元素
removed = fruits.pop()
print(removed) # 输出: pineapple
print(fruits)  # 输出: ['apple', 'cherry', 'blueberry', 'orange', 'grape', 'mango']

# 3.2 pop(index)删除指定位置的单个元素
removed = fruits.pop(1)
print(removed) # 输出: cherry
print(fruits)  # 输出: ['apple', 'blueberry', 'orange', 'grape', 'mango']

# 3.3 remove()删除第一个匹配的元素值
fruits.remove("orange")
print(fruits)  # 输出: ['apple', 'blueberry', 'grape', 'mango']

# 3.4 del删除
# 删除指定索引元素
del fruits[0]
print(fruits)  # 输出: ['blueberry', 'grape', 'mango']
# 删除切片
del fruits[0:2]
print(fruits)  # 输出: ['mango']
# 删除列表
del fruits
print(fruits) # 输出:NameError: name 'fruits' is not defined

'''4.删除元素 - 条件删除方法'''
# 原列表
lst = [1, 2, 3, 4, 5, 6]
# 删除所有偶数(保留奇数)- 列表推导式
new_lst = [x for x in lst if x % 2 != 0]
print(new_lst)  # 输出:[1, 3, 5]
print(lst)      # 原列表不变:[1, 2, 3, 4, 5, 6]

'''5.清空列表'''
fruits.clear()
print(fruits)  # 输出: []

Python 的 extend() 方法是列表(list)的核心内置方法之一,作用是将另一个可迭代对象(如列表、字符串、元组等)的所有元素 "逐个添加" 到当前列表末尾 ,区别于 append() 方法(直接将整个可迭代对象作为单个元素添加)。

2.4 列表的方法

python 复制代码
# 查找最大/最小值和其他统计信息
nums = [5, 2, 8, 1, 9]
print(max(nums))  # 9
print(min(nums))  # 1
print(sum(nums))  # 25

# 使用index()查询具有特定值的元素位置
fruits = ["apple", "banana", "orange", "apple"]
print(fruits.index('banana'))  # 输出:1

# 使用in判断值是否存在
print('apple' in fruits)  # 输出:True

# 使用count()记录特定值出现的次数
print(fruits.count('apple'))  # 输出:2

# 使用len()获取长度
print(len(fruits))  # 输出:4

# 使用sort()重新排列元素
nums.sort()  # 升序
print("升序数值:", nums)  # 输出:升序数值:[1, 2, 5, 8, 9]

nums.sort(reverse=True)  # 降序
print("降序数值:", nums)  # 输出:降序数值:[9, 8, 5, 2, 1]

# 复制列表 - 三种方法
original = [1, 2, 3]
shallow_copy = original.copy()    # 使用copy()方法
deep_copy = original[:]           # 使用切片操作
also_copy = list(original)        # 使用list()构造函数

三、元组

3.1 元组基本操作

python 复制代码
# 创建空元组
empty_tuple = ()
empty_tuple2 = tuple()
print(empty_tuple)  # 输出: ()

# 创建单个元素的元组(注意逗号)
single_item = (42,)
print(single_item)  # 输出: (42,)

# 省略括号的创建方式
simple_tuple = 1, 2, 3
print(simple_tuple)  # 输出: (1, 2, 3)

创建包含一个或多个元素的元组时,每一个元素后面都需要跟着一个逗号,即使只包含一个元素也不能省略。但是,如果创建的元组所包含的元素数量超过1,最后一个元素后面的逗号可以省略

3.2 元组解包

解包就是将容器类型(如元组、列表、字典等)中的元素分解为单个变量的过程。

解包就是把容器中的元素分配给多个变量。

python 复制代码
# 基本解包
person = ("Alice", 25, "Engineer")
name, age, job = person
print(name)  # 输出: Alice
print(age)   # 输出: 25
print(job)   # 输出: Engineer

# 星号解包(Python 3.0+)
numbers = (1, 2, 3, 4, 5)
first, *middle, last = numbers
print(first)   # 输出: 1
print(middle)  # 输出: [2, 3, 4]
print(last)    # 输出: 5

# 交换变量值
a = 10
b = 20
a, b = b, a
print(f"a = {a}, b = {b}")  # 输出: a = 20, b = 10

四、高级列表操作

4.1 zip函数 - "打包"函数

想象你有两列(或多列)数据,zip就像拉链一样,把对应的元素配对在一起。

python 复制代码
# 三个列表一起zip
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
jobs = ["工程师", "医生", "老师"]

result = list(zip(names, ages, jobs))
print(result)
# 输出: [('Alice', 25, '工程师'), ('Bob', 30, '医生'), ('Charlie', 35, '老师')]

# 长度不同的列表
list1 = [1, 2, 3, 4]
list2 = ["a", "b", "c"]  # 只有3个元素

result = list(zip(list1, list2))
print(result)  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
# 注意:zip以最短的列表为准

4.2 map函数 - "转换"函数

map就像是一个"加工厂",对列表中的每个元素进行同样的操作。

map的语法

python 复制代码
map(函数, 列表)

map的用法

python 复制代码
# 示例1:数字运算
numbers = [1, 2, 3, 4, 5]

# 每个数字乘以2
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)  # 输出: [2, 4, 6, 8, 10]

# 示例2:使用预定义函数
def add_prefix(name):
    return "学生_" + name

names = ["Alice", "Bob", "Charlie"]
prefixed_names = list(map(add_prefix, names))
print(prefixed_names)  # 输出: ['学生_Alice', '学生_Bob', '学生_Charlie']

4.3 filter函数 - "过滤"函数

filter的语法

python 复制代码
filter(判断条件, 列表)

filter的用法

python 复制代码
# 示例1:数字过滤
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 筛选大于5的数字
big_numbers = list(filter(lambda x: x > 5, numbers))
print(big_numbers)  # 输出: [6, 7, 8, 9, 10]

# 示例2:使用预定义函数
def is_adult(age):
    return age >= 18

ages = [15, 22, 17, 25, 16, 30]
adults = list(filter(is_adult, ages))
print(adults)  # 输出: [22, 25, 30]

经典白学:mapfilter现在都可以被更强大易读的列表推导式所替代,所以没懂也没关系哈哈。 在实际项目中,我强烈推荐大家多使用列表推导式,因为它更符合人类的阅读习惯,写起来就像说英语一样直观------"我要从这个列表中选取满足条件的元素,然后对它们进行某种处理"。这种清晰的表达方式让代码更易读、易维护。当然,这并不意味着map和filter函数就没有价值了,了解它们仍然很重要,一方面能帮助你阅读和理解一些历史代码库

相关推荐
可触的未来,发芽的智生5 小时前
一万个为什么:汉语词性对NLP的作用
python·神经网络·程序人生·自然语言处理
盼哥PyAI实验室5 小时前
Python函数进阶秘籍:闭包、装饰器与作用域全解析(通俗版)
开发语言·python
深度学习lover5 小时前
<数据集>yolo纸板缺陷识别数据集<目标检测>
python·深度学习·yolo·目标检测·计算机视觉·数据集
oceanstonetree6 小时前
用cosyvoice批量把生成有声书
开发语言·python
java1234_小锋6 小时前
TensorFlow2 Python深度学习 - 循环神经网络(GRU)示例
python·深度学习·gru·tensorflow2
王六岁6 小时前
# 🐍 前端开发 0 基础学 Python 入门指南: Python 元组和映射类型深入指南
前端·javascript·python
王六岁6 小时前
# 🐍 前端开发 0 基础学 Python 入门指南:常用的数据类型和列表
前端·javascript·python
南枝异客6 小时前
查找算法-顺序查找
python·算法
花开花富贵6 小时前
不敢去表白?来用代码画♥
python