В компьютерной логике c в python работает закон распределения? - PullRequest
0 голосов
/ 08 февраля 2020

Я думаю, что если условие 1 и условие 2 совпадают. но это не так.

a= [[20200101, 'batman'], [20200102, 'superman'], [20200102, 20200102], [20200103, 20200103]]

#if condition 1
for item in a:
    if (item[1] != 'batman') and (item[1] != item[0]):
        print(item)
print('div')

#if condition 2
for item in a:
    if item[1] != ('batman' and item[0]):
        print(item)

результат

[20200102, 'superman']
div
[20200101, 'batman']
[20200102, 'superman']

Результат, если условие 1 соответствует ожиданиям. Я думаю, что мне следует заново изучить логи c, которые я забыл с 2015 года.

1 Ответ

1 голос
/ 08 февраля 2020

x and y проверяет, оценивается ли x как истинное и дает ли оно y (и в противном случае x). Возьмите следующие примеры:

>>> 1 and []
[]
>>> [] and 1
[]

В вашем примере, поскольку 'batman' имеет значение true, это всегда дает item[0], поэтому вы проверяете только item[0] != item[1]. Если вы хотите сократить эту проверку, вы можете использовать:

if 'batman' != item[1] != item[0]:
    ...

Цепные сравнения расширены как проверка левого сравнения and правого. Более читабельным может быть использование tuple:

if item[1] not in ('batman', item[0]):
    ...
...