python中的for........in 配合序列解包

一、核心语法:for 循环元组解包(序列解包)

先看代码:
targets = [
    ("百度", "https://www.baidu.com"),
    ("搜狗", "https://www.sogou.com"),
    ("京东", "https://www.jd.com"),
]
# 完整正确写法
for name, url in targets:
    print(name, url)
 

1. 底层原理

targets列表,列表里每一个元素都是一个二元元组 (字符串, 字符串)
 
循环遍历 targets 时,每次取出一个元组,直接拆分成两个变量 nameurl,这个过程叫序列解包
等价拆解过程:
# 循环第一步取出第一个元组
item = ("百度", "https://www.baidu.com")
# 自动解包赋值
name, url = item
 

2. 解包规则

  1. 右边可迭代对象(元组 / 列表)里元素数量,必须和左边变量数量一致,否则报错;
 
# 报错:值数量不匹配
for name in targets:
    # name 拿到的是整个元组 ("百度", "url")
for name, url, x in targets:
    # 每个元组只有2个值,塞3个变量直接报错
 
  1. 不止元组,列表也能解包:
 
targets = [["百度", "url"], ["搜狗", "url"]]
for name, url in targets:
    pass
 

二、拓展用法

1. 多层解包

data = [(1, ("a", "b")), (2, ("c", "d"))]
for num, (s1, s2) in data:
    print(num, s1, s2)
 

2. 单变量接收整个元组(不解包)

for item in targets:
    print(item[0], item[1]) # item[0]名称 item[1]链接
 

3. 推导式中同样能用解包

# 提取所有网站名称
names = [name for name, url in targets]
# 生成 {名称:链接} 字典
site_dict = {name:url for name, url in targets}
 

三、补充:下划线占位符

如果只需要其中一个值,没用的变量用 _ 接收:
# 只拿url,名称不用
urls = [url for name, url in targets]
# 规范写法(标识变量未使用)
urls = [url for _, url in targets]
 
 
posted @ 2026-07-07 22:55  chenlight  阅读(9)  评论(0)    收藏  举报