Есть много способов выполнить одну и ту же задачу в python, но есть предпочтительный способ. Чтобы ваш код был pythonic, он должен соответствовать zen of python (PEP20).
import this
Настройка:
Давайте рассмотрим три различных способа суммирования векторов (вектор — это список чисел с плавающей запятой):
vectors = [[1.5, 2.5, 3.5], [3.5, 4.5, 5.5], [5.5, 6.5, 7.5], [7.5, 8.5, 9.5]]
Примечание: векторы имеют одинаковую длину.
Питоновский способ:
[sum(vector[i] for vector in vectors) for i in range(len(vectors[0]))] # -> [18.0, 22.0, 26.0]
Этот способ использует списки понимания. Это ясно и читабельно.
Не питонический способ:
res = [] for i in range(len(vectors[0]): temp = 0 for vector in vectors: temp += vector[i] res.append(temp) res # -> [18.0, 22.0, 26.0]
Этот способ является явным, поскольку он использует циклы for. Но когда дело доходит до python, должен быть один и только один предпочтительный способ.
Функциональный способ:
from functools import reduce list(map(sum, zip(*vectors))) # -> [18.0, 22.0, 26.0]
Этот способ является неявным, поскольку функциональная строка кода имеет тенденцию быть декларативной.
Я надеюсь, что это дало вам широкое представление о различных способах выполнения одной и той же задачи. Более того, питонический путь не черный и не белый; например, непитоновский способ в какой-то степени является питоническим, но поскольку есть лучший способ (списки понимания), он занял второе место.