Вычленение элементов списка, если не знаю конкретную длину
Возник такой вопрос. В своём проекте после определённых вычислений я получаю два списка коэффициентов:
k_1 = [1.1, 1.14, 1.18, 1.22, 1.3]
k_2 = [1, 1.05, 1.75, 1.8, 1.95]
По длине они всегда будут равны друг другу, но могут быть и 6 значений, и 7, т.е. конечная длина двух данных списков в каждом расчёте может быть разная, но на выходе их длина всегда равна.
Затем два этих коэф-та идут в формулу:
f = (735.6/(k_1 * k_2)) + 321
Вопрос: как сделать так, чтобы количество вычислений f было равно количеству значений списков коэффициентов и в каждом расчёте по порядку брался коэффициент из первого списка и из второго?
Результат должен быть таким:
f = (735.6 / (1.1 * 1.2)) + 321 # это первый расчёт
f = (735.6 / (1.14 * 1.05)) + 321 # второй и так далее пока списки с коэф-ми не закончатся
Думал как это реализовать ссылаясь на длины списков, но не справился с синтаксисом.
Ответы (4 шт):
ну так и отталкивайтесь от фактической длины списков:
for i in range(len(k_1)):
f = (735.6/(k_1[i] * k_2[i])) + 321
print(f)
или так еще можно:
import numpy as np
k_1 = [1.1, 1.14, 1.18, 1.22, 1.3]
k_2 = [1, 1.05, 1.75, 1.8, 1.95]
arr1 = np.array(k_1)
arr2 = np.array(k_2)
f = (735.6/(arr1 * arr2)) + 321
>>> list(f)
'''
[989.7272727272727,
935.5363408521305,
677.222760290557,
655.9726775956284,
611.1775147928994]
Или можно объединить списки в словарь, а далее перемножить ключи со значениями:
dict1 = dict(zip(k_1, k_2)
for k_1, k_2 in dict1.items():
f = (735.6/(k_1 * k_2)) + 321
print(f)
Так то знание конкретной длины вам вообще не нужно, просто параллельно итерируетесь по обоим словарям и всё:
for k1, k2 in zip(k_1, k_2):
f = (735.6/(k1 * k2)) + 321
print(f)
Ну или все значения f в одном списке:
f = [(735.6/(k1 * k2)) + 321 for k1, k2 in zip(k_1, k_2)]
print(f)
По идее этот код мог быть в другом ответе, но автор того ответа упорно цепляется за лишний промежуточный словарь.