使用if语句迭代列表

时间:2011-05-28 21:28:22

标签: python list loops if-statement

我有一个列表,我循环使用“for”循环并通过if语句运行列表中的每个值。我的问题是,如果列表中的所有值都传递if语句并且如果没有传递,我试图只让程序执行某些操作,我希望它移动到列表中的下一个值。目前,如果列表中的单个项目传递if语句,则返回一个值。有什么想法让我指出正确的方向?

4 个答案:

答案 0 :(得分:10)

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,例如,只有当所有值都大于2时,它才会返回True。

答案 1 :(得分: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)

答案 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 :(得分: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来转到下一个值,或者使用它们在数组中的位置迭代失败的值。