Как мы используем оператор «и» при индексации массива?

Я нашел один код, который использовал A[i][j] += min(A[i - 1][j and j - 1:j + 2]). Я пробовал аналогичную реализацию, как показано ниже, что дало мне неожиданные результаты. Кто-нибудь может мне объяснить? Я не могу понять, как интерпретируется «и» в таких ситуациях.

a = [1,2,3,4,5,6,7,8,9,10,11,12]

print(a[0 and 3:4]) #[1, 2, 3, 4]

print(a[1 and 3:4]) #[4]

print(a[1 and 3:6]) #[4, 5, 6] 

print(a[0 and 3:6]) #[1, 2, 3, 4, 5, 6]

print(a[2 and 3:6]) #[4, 5, 6]

редактировать: в [0 и 3:4] он включает элементы от 0 до 3, но если я использую [1 и 3:4], он дает только 3-й элемент, тогда как я ожидаю элементы от 1 до 3


person Karan Shah    schedule 30.10.2018    source источник
comment
Что вы подразумеваете под неожиданными результатами?   -  person toti08    schedule 30.10.2018
comment
отредактировано. пожалуйста, проверьте   -  person Karan Shah    schedule 30.10.2018
comment
0 and 3 это 0, потому что 0 ложно. 1 and 3 это 3, потому что 1 правдиво. См. обманную цель.   -  person khelwood    schedule 30.10.2018
comment
Забавный факт: если вы не знаете: True также является целым числом, то есть 1 . bool наследует int. Но будьте осторожны с это.   -  person Vinay W    schedule 30.10.2018


Ответы (2)


AND имеет более высокий приоритет, чем оператор среза :.

Ваши выражения работают как,

a[0 and 3:4] --> a[(0 and 3):4] --> a[0:4] --> [1, 2, 3, 4]
person Lafexlos    schedule 30.10.2018
comment
Да, я понял это сейчас. Но что в случае «и» между двумя ненулевыми целыми числами? - person Karan Shah; 30.10.2018
comment
ненулевые целые числа не являются ложными значениями, поэтому между двумя ненулевыми значениями будет использоваться второе. -1 and -5 --› -5 - person Lafexlos; 30.10.2018
comment
ООО Спасибо. устраняет все недоразумения. - person Karan Shah; 30.10.2018
comment
@KaranShah И теперь, когда вы знаете, как это работает, никогда не используйте это так ;-) - person jarmod; 30.10.2018
comment
хе-хе, но это весело XD @jarmod - person Karan Shah; 30.10.2018

В вашем случае вы просто сравниваете целые значения с помощью «и», а не значения, стоящие за значениями индекса. Если вы сравниваете что-либо с 0, вы получаете 0. Во всех остальных случаях вы получаете значение второго целого числа (возможно, не для каждого интерпретатора Python).

person Frank from Frankfurt    schedule 30.10.2018