Python: как сделать if if for for быстрее, когда первое значение отличается от любого другого? - PullRequest
0 голосов
/ 12 июня 2019

Я имею дело с функцией, которая выглядит следующим образом:

def A(x):
   A=range(n)
   A[0]=(bx[0] if condition1 else cx[0])
   for i in range(1,n):
            A[i]=((dx[i] if condition2 else ex[i])

   return  map(lambda x: x+3, A)

, где A - это список, а b, c, d, e - операции, которые принимают x в качестве переменной. По сути, мне нужно сделать оператор if для первого значения в A-списке и другой оператор if для любого другого значения, кроме первого. Есть ли способ сделать это более эффективным?

спасибо

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

Вы можете использовать np.where

import numpy as np
def A(x):
   A = np.arange(n)
   A[0] = (bx[0] if condition1 else cx[0])
   A[1:] = np.where(condition2, dx[1:], ex[1:])

   return A + 3
2 голосов
/ 12 июня 2019

С точки зрения реструктуризации кода - в этом контексте можно применить как минимум 2 оптимизации:

  • предотвратить двойной range() вызов
  • предотвращение избыточного зацикливания, вызванного вызовом map (просто для добавления 3 к каждому элементу)

Оптимизированная версия:

def func(x):
   res = [((bx[0] if condition1 else cx[0]) if i == 0 
          else (dx[i] if condition2 else ex[i])) + 3 
          for i in range(0, n)]

   return res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...