@KrisTeylor

Почему тернарный оператор вызывает ошибку SyntaxError: invalid syntax?

def merge(A, B):
    l3 = []
    i, j = 0, 0
    while i < len(A) or j < len(B):
        if i < len(A) and j < len(B):
            l3.append(A[i]) if A[i] < B[j] else l3.append(B[j])
            i += 1 if A[i] < B[j] else j += 1 # Здесь ошибка в  j += 1
        elif i < len(A):
            return l3 + A[i:]
        else:
            return l3 + B[j:]

PyCharm ругается на три проблемы в строке с тернарным оператором:
End of statement expected
Statement expected, found Py:PLUSEQ
Statement seems to have no effect

И, собственно, ошибка:
i += 1 if A[i] < B[j] else j += 1
                             ^
SyntaxError: invalid syntax

Как я понял что-то не так с j += 1, хотелось бы понять что.
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 2
lxstvayne
@lxstvayne
Люблю Python
i += 1 if A[i] < B[j] else -1
Читается так: Добавим к i единицу если A[i] < B[j] иначе добавим -1.
Ответ написан
Комментировать
@galaxy
j += 1 как и j = 1 - это Assignment statements, не операторы. Питон вам не C, тут присваивание не является оператором, нельзя писать, например:
if ((j = j/2) > 0) {
...

В то же время есть специальный оператор, реализующий Assignment Expressions:
if (match := pattern.search(data)) is not None:
    # Do something with match

Но он несколько ограниченный. Как минимум, операторов +:=, -:= и т.п. не существует.

Что вы вообще там сделать хотите в своем коде?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы