Поэлементная сумма двух списков с заменой нулей одного списка на значения третьего списка - PullRequest
1 голос
/ 03 марта 2020

У меня есть список, и я хочу посчитать сумму b и c поэлементно. Но я хочу список b, если какое-то значение равно 0, чтобы получить значение из a.

a=[7,5,6,9,4]
b=[0,3,4,8,0]
c=[6,8,3,0,1]

Мое решение:

ab=[(b+c) if b else a for b,c in zip(b,c)]

, которое дает следующий вывод: [[7, 5, 6, 9, 4], 11, 7, 8, [7, 5, 6, 9, 4]]

Однако, это не то, что я хочу. Мне нужно вместо 0 в b он возвращает 7, но в моем коде он возвращает весь список a.

Ответы [ 2 ]

4 голосов
/ 03 марта 2020

Вы можете сделать это следующим образом:

a = [7, 5, 6, 9, 4]
b = [0, 3, 4, 8, 0]
c = [6, 8, 3, 0, 1]
ab = [((bi or ai) + ci) for ai, bi, ci in zip(a, b, c)]
print(ab)
# [13, 11, 7, 8, 5]

(bi or ai) даст вам значение bi, если это не 0, в этом случае оно даст вам ai. Это немного «злоупотребление» логической операцией or в Python, которая всегда возвращает первый операнд, если это не «ложь», где он возвращает второй операнд, но это часто используемая идиома.

0 голосов
/ 03 марта 2020

Предполагая, что они всегда имеют одинаковую длину, вы можете попробовать:

ab = []
for i in range(len(b)):
    if b[i] == 0:
        ab.append(a[i]+c[i])
    else:
        ab.append(b[i]+c[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...