Безобразно, но это делает свою работу:
list_result = [
(
1
if list_a[i] <= a else
a/list_a[i] * (1 - list_b[i])
)
if a != 0 else
(
1
if list_a[i] <= b else
b/list_a[i] * (1-list_b[i])
)
for i in xrange(len(list_a))
]
Лично я против такой сложной логики;хотя ваше решение может показаться непифоническим, его легче понять.
Если вас интересуют подробности, это были мои шаги:
- Сделка с внешним
if
:
list_result = [
(first condition)
if a != 0 else
(second condition)
(for i in something, or for element in set, or... don't care yet)
]
Сборка первого вложенного
if
:
list_result = [
(
1
if list_a[i] <= a else
a/list_a[i] * (1 - list_b[i])
)
if a != 0 else
(second condition)
(still skipping the iteration part, will return later to it)
]
Создайте второе вложенное
if
таким же образом. Наконец, создайте итерацию.