Python迭代器还可以这样玩
Python七号
共 1486字,需浏览 3分钟
·
2020-10-11 02:50
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/is-subsequence
>>> def is_subseq(s,t):
... t = iter(t)
... return all(i in t for i in s)
...
>>> is_subseq('ace','abcde')
True
>>> is_subseq('aec','abcde')
False
>>>
>>> t = 'abcde'
>>> iter(t)0x7fa7f22c8a60>
>>> t = iter(t)
>>> t0x7fa7f229d4c0>
(i in t for i in s)
__next__
方法,当存在时直接返回 True,而下一次判断时继续 __next__
而并不回到起始位置重新查找。这一点,我们可以一步一步执行 next 做实验:以 s= 'aec' 和 t = 'abcdef' 为例:>>> t = 'abcdef'
>>> s = 'aec'
>>> t = iter(t)
>>> 'a' in t
True
>>> next(t)
'b'
>>> 'e' in t
True
>>> #此时指针已经指向 e,再调用 next 回返回 f
>>> next(t)
'f'
>>> 'c' in t #指针已经指向 f,f 后面不会出现字符 c,必然返回 false
False
评论