Python将for循环输出传入另一for循环时值重复问题
问题根源
两个for循环是先后独立执行的,第一个循环全部运行结束后,变量c只会保留最后一次迭代的赋值结果,不会在第二个循环执行时动态更新。因此第二个循环每次读取c时,拿到的都是第一个循环最后一次生成的[3.0, 4.0],最终输出的所有字典对应值完全重复。
修复方案
不要把生成c的逻辑和第二个循环拆成独立的两段执行,保证每次生成字典e时,用到的c是和当前迭代步匹配的值即可。因为np.linspace(0,3,3)生成的序列长度和处理后的列表a长度一致,有两种简单的实现方式:
- 用
zip同步遍历两个序列,在同一次迭代里生成当前步需要的c和字典e
import pandas as pd import numpy as np a = list(np.sort(np.random.uniform(low=2, high=3, size=(3,)))) a = [round(elem, 1) for elem in a] # 同步遍历两个序列,单轮迭代内完成c的生成和e的组装 for b, lrng in zip(a, np.linspace(0, 3, 3)): c = [b, b + 1] d = [lrng, 15.0] e = {d[0]: c, d[1]: [2.0, 2.0]} print(e)
- 如果业务逻辑需要提前生成所有
c值,可以先把每次迭代生成的c存入列表,第二个循环遍历的时候按索引取对应位置的c
import pandas as pd import numpy as np a = list(np.sort(np.random.uniform(low=2, high=3, size=(3,)))) a = [round(elem, 1) for elem in a] # 提前存储所有c的结果 c_list = [] for b in a: c = [b, b + 1] c_list.append(c) # 带索引导出,匹配对应位置的c for idx, lrng in enumerate(np.linspace(0, 3, 3)): d = [lrng, 15.0] e = {d[0]: c_list[idx], d[1]: [2.0, 2.0]} print(e)
以上两种写法运行后,都能得到预期的输出结果,每个字典中对应的c值会按顺序匹配a中每个元素计算得到的结果,不会出现全为最后一次迭代值的问题。
内容的提问来源于stack exchange,提问作者user19319806
相关产品推荐
相关产品推荐

