Почему результат этого кода python ложный? - PullRequest
0 голосов
/ 04 августа 2020

Почему следующий код:

a = [8, 0, 4, 6]

if a.reverse() == a[::-1]:
    print(True)
else:
    print(False)

Выводит False?

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Потому что list.reverse переворачивает список на месте и возвращает None. Вы делаете это:

if None == a[::-1]: # which is obviously not True
1 голос
/ 04 августа 2020

a.reverse() возвращает None. Он находится в обратном порядке. Вы можете попробовать reversed(a)

Если его Python 3, обратный возврат вернет генератор, поэтому вам снова придется делать [i for i in reversed(a)]

0 голосов
/ 04 августа 2020

Также обратите внимание, что когда вы выполняете if a.reverse() ..., python выполняет a.reverse() и, следовательно, соответственно изменяет a. Другими словами:

a = [8, 0, 4, 6]
print(f'before evaluation in if statement: {a}\n')
if a.reverse():
    print(True)
print(f'after evaluation in if statement: {a}')

Вывод:

before evaluation in if statement: [8, 0, 4, 6]

after evaluation in if statement: [6, 4, 0, 8]

Альтернативный способ без изменения a:

a = [8, 0, 4, 6]
if list(reversed(a)) == a[::-1]:
    print(True)
else:
    print(False)
print(f'after evaluation in if statement: {a}')

Вывод

True
after evaluation in if statement: [8, 0, 4, 6]
...