You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教两段Python代码的差异:执行结果不同但逻辑看似一致

两段Python代码的差异分析

基础代码

import pandas as pd
df = pd.DataFrame({"A":[1, 2, 3, 4, 5],"B":[10, 20, 30, 40, 50],"C":[11, 22, 33, 44, 55],"D":[12, 24, 51, 36, 2]})

num_pairs = [(1,5),(2,10),(3,15),(4,20),(5,25)]
num_range = list(range(8,16))

代码1:列表推导式赋值

df['E'] = [num_pair[0] if num_pair[1] in num_range else 0 for num_pair in num_pairs]

这段代码通过列表推导式生成一个长度为5的列表,每个元素对应num_pairs中单个元组的判断结果:

  • 遍历num_pairs里的每个元组,检查元组第二个元素是否在num_range(8-15区间)内
  • 符合条件就取元组第一个元素,否则取0
  • 最终生成列表[0, 2, 3, 0, 0],直接赋值给df['E'],让列中每行对应列表里的一个值。

代码2:循环覆盖赋值

for num_pair in num_pairs:
    if num_pair[1] in num_range:
        df['E']= num_pair[0]
    else: 
        df['E'] = 0

这段代码是循环整列覆盖赋值:

  • 每次循环都会把df['E']整列设置为同一个值:
    1. 第一次循环:元组(1,5),5不在8-15区间,整列设为0
    2. 第二次循环:元组(2,10),10在区间内,整列设为2
    3. 第三次循环:元组(3,15),15在区间内,整列设为3
    4. 第四次循环:元组(4,20),20不在区间,整列设为0
    5. 第五次循环:元组(5,25),25不在区间,整列设为0
  • 最终df['E']整列都是0,因为最后一次循环的赋值完全覆盖了之前的结果。

核心差异

  • 代码1是一次性生成对应每行的多值列表,给df['E']的每行分配不同的值
  • 代码2是每次循环都给整列赋单一值,后续循环的赋值会完全覆盖之前的结果,最终只保留最后一次循环的赋值

内容的提问来源于stack exchange,提问作者MarvinLok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:36:23