如何使用iter函数在列表中循环,直到找到某个匹配项

2024-10-01 15:43:34 发布

您现在位置:Python中文网/ 问答频道 /正文

坦白地说,我不明白如何使用^{}函数,我正在尝试循环使用lst(一个列表)并打印所有值,直到'kdawg'

代码:

lst = [2,3,4,'kdawg',5,6,'hey']

class foo:
    def __str__(self):
        return str(lst)

for i in iter(foo,'kdawg'):
    print i

我希望它会回来:

^{pr2}$

但是它会连续返回整个列表:

[2,3,4,'kdawg',5,6,'hey']

为什么我的iter()功能不起作用?在


Tags: 函数代码self列表forreturnfoodef
3条回答

如果要使用iter执行此操作,请使用functools.partial

>>> from functools import partial
for i in iter(partial(next, iter(lst)), 'kdawg'):
        print i
...     
2
3
4

iter要求您传递一个一个返回值的callable,也就是说,该类和对该类的调用每次都返回一个新实例,该实例不等于传递给iter的sentinel值。在

^{pr2}$

在代码中,i始终是class的实例:

for i in iter(foo,'kdawg'):
    print repr(i)

输出:

<__main__.foo instance at 0xa15286c>
<__main__.foo instance at 0xa15284c>
<__main__.foo instance at 0xa15286c>
...
...

从开始到lst.index('kdawg')

>>> lst = [2,3,4,'kdawg',5,6,'hey']
>>> for i in lst[:lst.index('kdawg')]:
...     print i 
2
3
4

注意:如果在列表中找不到该项,您可能需要处理ValueError

^{pr2}$

列表中有ele

>>> a = [2,3,4,'kdawg',5,6,'hey']
>>> for i in iterUpto(a, 'kdawg'):
...     print i
2
3
4

如果ele不在列表中:

>>> for i in iterUpto(a, 'foo'):
...     print i
2
3
4
kdawg
5
6
hey

使用^{}

>>> from itertools import takewhile
>>> 
>>> l = [2,3,4,'kdawg',5,6,'hey']
>>> 
>>> for i in takewhile(lambda s: s != 'kdawg', l):
...     print i
... 
2
3
4

相关问题 更多 >

    热门问题