Обновление различных элементов массива на основе троичного условия - PullRequest
0 голосов
/ 24 апреля 2020

Я ищу синтаксис троичного оператора, чтобы сделать что-то вроде

a = [1, 2, 3, 4, 5]
if True:
    a[1] += 1
else:
    a[2] += 1

Я пытался

a[1] += 1 if True else a[2] += 1

и

True and a[1] += 1 or a[2] += 1

Оба выдал ошибку

SyntaxError: invalid syntax

Кто-нибудь знает троичный способ сделать это?

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 24 апреля 2020

Вы должны были бы переместить это выражение в саму операцию индексации

a[1 if True else 2] += 1

Из-за указанной грамматики в python вы не можете выполнять назначения в условных выражениях

>>> a = 1 if True else b = 1
SyntaxError: can't assign to conditional expression

Это также верно для модификаторов, таких как +=.

1 голос
/ 24 апреля 2020

Я думаю, что решение @ CoryKramer более элегантно, но просто чтобы дать другой путь:

a[1], a[2] = (a[1] + 1, a[2]) if True else (a[1], a[2] + 1)
1 голос
/ 24 апреля 2020

Остерегайтесь, что троичный оператор не всегда самое чистое решение

a[ 1 if True else 2 ] +=1

Ps: только что заметил, что я слишком медленный

...