#python #list #list-comprehension
Вопрос:
Вот функция в моем коде:
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 понимания списка. Интересно, есть ли более короткий способ или другой подход, с помощью которого я могу выполнять такие вычисления? Спасибо за помощь:)
Комментарии:
1. Я бы сказал, что это хороший случай для простого использования цикла for вместо понимания списка. Нет причин создавать новый список на каждом шаге, когда вы могли бы просто использовать цикл for и выполнять все вычисления одновременно, оставаясь одинаково читабельными.
2. Вы можете объединить все ваши картографические операции в одну. Не уверен, что так лучше.
3. не уверен, что вам нужен второй цикл здесь, я иду с
Is = [1/(np.sqrt(i)/Peak_shot) for i in Est_Succshots]
и отбрасываю Est_error
Ответ №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()
Комментарии:
1. Спасибо за ответ! Да
Last_scan
-это словарь иPeak_shot
это число. Он возвращаетсяTypeError: unsupported operand type(s) for /: 'int' and 'dict_values'
2. В таком случае замените
Last_scan.values()
наlist(Last_scan.values())
.3. Потрясающе. Большое спасибо!