2011-05-28 149 views
8

我有一个列表,我正在循环使用“for”循环,并通过if语句在列表中运行每个值。我的问题是我只想让程序做一些事情,如果列表中的所有值都通过了if语句,并且如果没有通过,我希望它移动到列表中的下一个值。目前,如果列表中的单个项目通过if语句,它将返回一个值。任何想法让我指出正确的方向?使用if语句遍历列表

+9

示例代码总是帮助我们更好地帮助您。 – 2011-05-28 21:30:35

+3

发布您的代码。 – GWW 2011-05-28 21:30:45

+0

'sort'并与一个已知的src进行比较,但是正如其他人所说的那样,发布一些代码以便我们可以确定您的列表的样子! – 2011-05-28 21:34:21

回答

9

Python为您提供了大量的选项来处理这种情况。如果您有示例代码,我们可以为您缩小范围。你可以看看

一种选择是all操作:

>>> all([1,2,3,4]) 
True 
>>> all([1,2,3,False]) 
False 

你也可以检查过滤列表的长度:

>>> input = [1,2,3,4] 
>>> tested = [i for i in input if i > 2] 
>>> len(tested) == len(input) 
False 

如果您使用的是for结构可以如果遇到负面测试,请尽早退出环路:

>>> def test(input): 
...  for i in input: 
...   if not i > 2: 
...    return False 
...   do_something_with_i(i) 
...  return True 

上述test函数将返回在这2或更低,例如第一个值false,而它会返回True只有当所有值均大于2

0

你通过你的整个列表需要循环,并检查条件,然后再尝试对数据做任何其他事情,所以你需要两个循环(或者使用一些内置的循环,像all())。从这个键盘什么也没有太花哨,http://codepad.org/pKfT4Gdc

def my_condition(v): 
    return v % 2 == 0 

def do_if_pass(l): 
    list_okay = True 
    for v in l: 
    if not my_condition(v): 
     list_okay = False 

    if list_okay: 
    print 'everything in list is okay, including', 
    for v in l: 
     print v, 
    print 
    else: 
    print 'not okay' 

do_if_pass([1,2,3]) 
do_if_pass([2,4,6]) 
3

也许你可以尝试用for ... else声明。

for item in my_list: 
    if not my_condition(item): 
     break # one item didn't complete the condition, get out of this loop 
else: 
    # here we are if all items respect the condition 
    do_the_stuff(my_list) 
0

如果您在尝试遍历它时删除列表中的项目,则必须小心。

如果你不删除,然后这是否帮助:

>>> yourlist=list("abcdefg") 
>>> value_position_pairs=zip(yourlist,range(len(yourlist))) 
>>> value_position_pairs 
[('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6)] 
>>> filterfunc=lambda x:x[0] in "adg" 
>>> value_position_pairs=filter(filterfunc,value_position_pairs) 
>>> value_position_pairs 
[('a', 0), ('d', 3), ('g', 6)] 
>>> yourlist[6] 
'g' 

现在如果value_position_pairs是空的,你就大功告成了。如果不是,您可以将i增加1以转到下一个值,或者使用它们在数组中的位置迭代失败的值。