Проверка существования элементов внутри итератора в python - PullRequest
0 голосов
/ 23 сентября 2018

Когда мы используем итератор, элементы выскакивают по порядку, тогда как мы можем проверить, является ли угадывающий элемент внутри итератора или нет?В моем коде только in, кажется, работает:

t = "cawqv"
it = iter(t)

print(next(it))
print("a" in it)
print("w" is it) 
print("w" == it)
print("w" in it)
>>
c
True
False
False
True

is вряд ли сработает в этом случае, поскольку он проверяет, являются ли два объекта одним и тем же объектом, но == заботится только об их значении,как equals() метод в Java.Является ли оператор in единственным, который мы можем использовать для проверки существования элемента внутри итератора?

1 Ответ

0 голосов
/ 23 сентября 2018

"w" == it проверяет, равна ли w (строка) вашему итератору, который, очевидно, равен False, поскольку ваш итератор инкапсулирует последовательность, которая может содержать или не содержать w.Чтобы проверить существование элемента, использующего равенство, вам нужно будет фактически выполнить итерацию по вашему итератору, а затем проверить, равен ли какой-либо из элементов, обнаруженных во время итерации, вашему элементу поиска, то есть:

print(any(i == "w" for i in it))

, но это то, чтоВ любом случае, print("w" in it) внутренне.Имейте в виду, что вышеприведенный будет исчерпывать (частично при совпадении, полностью, если элемент не соответствует) ваш итератор, как это делает "w" in it, потому что вам нужно перебрать итератор, чтобы определить, является ли какой-либо изэлементы соответствуют вашему поисковому элементу, например

t = "cawqv"
it = iter(t)
print("w" in it)  # True
print("w" in it)  # False - we're pass the `w` point by now
print("q" in it)  # False - we already exhausted our iterator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...