Условное заявление Python3 - PullRequest
0 голосов
/ 04 мая 2019

Мне интересно, что оценивает следующее на каждой итерации, я проверил интернет, но не могу найти какие-либо конкретные ответы

А также, если есть более эффективные способы сделать это.

for i in range(0, len(c)):
    if i & True:
           pass

Ответы [ 2 ]

3 голосов
/ 04 мая 2019

True имеет целочисленное значение 1 в Python, поэтому, когда цикл повторяет целое число i от 0 до длины c и выполняет побитовые операции, а также i и 1, он эффективно проверяет, является ли i нечетным числом, и, если это так, выполняет оператор pass (где я считаю, что в вашем реальном коде больше кода).

Что касается более эффективного способаСделайте это, вместо того чтобы генерировать все числа от 0 до длины c и отфильтровывать четные числа, вы можете использовать параметр step функции range для генерации желаемой последовательности нечетных чисел в первую очередь:

for i in range(1, len(c), 2):
    pass
1 голос
/ 04 мая 2019

i & True оценивается как 0 для четных чисел и 1 для нечетных чисел.

for i in range(0, 5): 
    print(i, i & True)

выход:

(0, 0)
(1, 1)
(2, 0)
(3, 1)
(4, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...