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

求助:编写子程序根据X列表的M/W对NUM列表元素分别乘5或10

嘿,我来帮你解决这个问题!你需要根据X列表里的M/W标记,对应处理NUM列表的元素——M对应乘5,W对应乘10对吧?之前用索引的方法没成功,没关系,我给你几种靠谱的实现方式,咱们一步步来:

解法1:最简洁的列表推导式 + zip()

这是Python里处理这类配对问题最常用的写法,用zip()把X和NUM的对应元素打包在一起,然后直接判断处理:

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

def process_numbers(num_list):
    # 把两个列表的元素一一配对,遍历处理
    return [num * 5 if x == 'M' else num * 10 for x, num in zip(X, num_list)]

# 测试调用
result = process_numbers(NUM)
print(result)  # 输出结果: [5, 20, 30, 20, 25, 60]

简单说,zip(X, num_list)会把两个列表的对应元素拼成元组(比如第一个元组是('M', 1)),然后我们逐个判断每个元组里的标记是M还是W,再对数字做乘法,最后生成新的结果列表。

解法2:修正索引遍历的写法(解决你之前的问题)

如果你之前想用索引的方法没成功,大概率是循环逻辑没处理对,这里给你修正后的版本:

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

def process_numbers(num_list):
    # 先检查两个列表长度是否一致,避免索引越界
    if len(X) != len(num_list):
        raise ValueError("X列表和传入的NUM列表长度必须一致!")
    
    result = []
    # 遍历每个元素的索引
    for i in range(len(num_list)):
        if X[i] == 'M':
            result.append(num_list[i] * 5)
        else:
            result.append(num_list[i] * 10)
    return result

# 测试运行
print(process_numbers(NUM))  # 同样得到正确结果: [5, 20, 30, 20, 25, 60]

这里加了长度检查的判断,避免因为两个列表长度不一样导致索引越界报错,这也是你之前可能踩的坑哦。

解法3:函数式风格的map()写法

如果你偏爱函数式编程,可以用map()配合lambda函数来实现:

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

def process_numbers(num_list):
    return list(map(lambda x, num: num * 5 if x == 'M' else num * 10, X, num_list))

# 测试
print(process_numbers(NUM))

这个逻辑和列表推导式完全一致,只是用map()来批量处理配对的元素,最后转成列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:19