Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用iter函数在列表中循环,直到找到某个匹配项_Python_Python 2.7 - Fatal编程技术网

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

Python 如何使用iter函数在列表中循环,直到找到某个匹配项,python,python-2.7,Python,Python 2.7,坦率地说,我不知道如何使用该函数,我正在尝试循环使用lst(一个列表)并打印所有值,直到'kdawg' >>> lst = [2,3,4,'kdawg',5,6,'hey'] >>> for i in lst[:lst.index('kdawg')]: ... print i 2 3 4 代码: 我希望它会回来: 2 3 4 但是,它会连续返回整个列表: [2,3,4,'kdawg',5,6,'hey'] <__main__.foo in

坦率地说,我不知道如何使用该函数,我正在尝试循环使用
lst
(一个列表)并打印所有值,直到
'kdawg'

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

我希望它会回来:

2
3
4
但是,它会连续返回整个列表:

[2,3,4,'kdawg',5,6,'hey']
<__main__.foo instance at 0xa15286c>
<__main__.foo instance at 0xa15284c>
<__main__.foo instance at 0xa15286c>
...
...
为什么我的
iter()
函数不起作用?

使用:


从开始到第一个索引('kdawg')

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

def iterUpto(a, ele):
    '''
    If ele is in a return sublist from 0 to index(ele) otherwise return a
    '''
    if ele in a: return a[:a.index(ele)]              
    return a
>>> a = [2,3,4,'kdawg',5,6,'hey']
>>> for i in iterUpto(a, 'kdawg'):
...     print i
2
3
4
>>> for i in iterUpto(a, 'foo'):
...     print i
2
3
4
kdawg
5
6
hey
使用列表中的
ele

def iterUpto(a, ele):
    '''
    If ele is in a return sublist from 0 to index(ele) otherwise return a
    '''
    if ele in a: return a[:a.index(ele)]              
    return a
>>> a = [2,3,4,'kdawg',5,6,'hey']
>>> for i in iterUpto(a, 'kdawg'):
...     print i
2
3
4
>>> for i in iterUpto(a, 'foo'):
...     print i
2
3
4
kdawg
5
6
hey
ele
不在列表中时:

def iterUpto(a, ele):
    '''
    If ele is in a return sublist from 0 to index(ele) otherwise return a
    '''
    if ele in a: return a[:a.index(ele)]              
    return a
>>> a = [2,3,4,'kdawg',5,6,'hey']
>>> for i in iterUpto(a, 'kdawg'):
...     print i
2
3
4
>>> for i in iterUpto(a, 'foo'):
...     print i
2
3
4
kdawg
5
6
hey

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

>>> from functools import partial
for i in iter(partial(next, iter(lst)), 'kdawg'):
        print i
...     
2
3
4
iter
希望您传递一个可调用的对象,该对象逐个返回值,您的情况就是该类,每次调用该类都返回一个新实例,该实例不等于传递给
iter
的sentinel值

>>> p = partial(next, iter(lst))
>>> p()
2
>>> p()
3
>>> p()
4
>>> p()
'kdawg'
在代码中,
i
始终是该
类的实例:

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

[2,3,4,'kdawg',5,6,'hey']
<__main__.foo instance at 0xa15286c>
<__main__.foo instance at 0xa15284c>
<__main__.foo instance at 0xa15286c>
...
...

...
...
第四个选项:

for i in lst:
    if i == 'kdawg':
        break
    print i
或者,如果您需要创建一个新列表:

new_lst = []
for i in lst:
    if i == 'kdawg':
        break
    new.append(i)
或者不是制作一个新的列表,而是一个生成器函数

def not_kdawg:
    for i in lst:
        if i == 'kdawg':
            break
        yield i

你有问题吗?“除非你问一个具体的问题,否则很难准确地知道你想要什么,或者准确地找到你的知识差距所在。”Robᵩ 为什么我的iter()函数不起作用?@KDawG检查我的解决方案。