【问题标题】:Is there a way to combine multiple list comprehensions in Python?有没有办法在 Python 中组合多个列表推导?
【发布时间】:2021-08-11 01:13:07
【问题描述】:

这是我的代码中的一个函数:

def get_weights(Last_scan, Peak_shot):
    Est_Succshots = [x*Peak_shot for x in Last_scan.values()]
    Est_error = [np.sqrt(i)/Peak_shot for i in Est_Succshots]
    Is = [1/m for m in Est_error]
    Weights = [i/sum(Is) for i in Is]
    return Weights

我使用了 4 个列表推导来进行计算。我想知道是否有更短的方法或不同的方法可以执行此类计算?感谢您的帮助:)

【问题讨论】:

  • 我会说这是一个很好的例子,只使用 for 循环而不是列表推导。没有理由在每一步都创建一个新列表,因为您可以只使用 for 循环并一次完成所有计算,同时具有同样的可读性。
  • 您可以将所有映射操作合并为一个。不知道这样是否更好。
  • 不确定您是否需要在这里进行第二个循环,请使用Is = [1/(np.sqrt(i)/Peak_shot) for i in Est_Succshots] 并删除 Est_error

标签: python list list-comprehension


【解决方案1】:

假设Last_scan.values()是一个数字列表,Peak_shot是一个数字,这似乎相当于

def get_weights(Last_scan, Peak_shot):
    Is =  np.sqrt(Peak_shot/np.array(Last_scan.values()))
    return Is/Is.sum()

【讨论】:

  • 感谢您的回答!是的,Last_scan 是字典,Peak_shot 是数字。它返回TypeError: unsupported operand type(s) for /: 'int' and 'dict_values'
  • 在这种情况下,将Last_scan.values() 替换为list(Last_scan.values())
  • 太棒了。非常感谢!
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多