使用 if 语句遍历列表

Posted

技术标签:

【中文标题】使用 if 语句遍历列表【英文标题】:iterating through a list with an if statement 【发布时间】:2011-09-04 02:24:27 【问题描述】:

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

【问题讨论】:

示例代码总能帮助我们更好地帮助您。 sort 并与已知的 src 进行比较,我想到了,但正如其他人所说,发布一些代码,以便我们可以查看您的列表的外观! 您没有说明您使用该功能的目标是什么;例如如果函数需要对中间状态做一些事情 看看这个***.com/questions/6009589/… -1 ... 发布一个关于代码的含糊不清的问题,但没有显示代码,也不想回答不可避免的问题。 【参考方案1】:

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。

【讨论】:

【参考方案2】:

也许您可以尝试使用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)

【讨论】:

【参考方案3】:

在尝试对数据执行任何其他操作之前,您需要遍历整个列表并检查条件,因此您需要两个循环(或使用一些为您执行循环的内置函数,例如 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])

【讨论】:

【参考方案4】:

如果您在尝试迭代列表时从列表中删除项目,则必须始终小心。

如果您不删除,那么这是否有帮助:

>>> 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 加一以转到下一个值或使用它们在数组中的位置遍历失败的值。

【讨论】:

以上是关于使用 if 语句遍历列表的主要内容,如果未能解决你的问题,请参考以下文章

遍历选项卡列表并使用 if 语句显示不同的视图

If语句是一个字符串还是字符串列表[重复]

使用 LINQ 遍历列表并设置已创建的变量 [重复]

带有字典、列表和 If 语句的嵌套循环

为啥 if 语句迭代返回模棱两可的系列 bool?

《Python从入门到实践》--第五章 各种情形下使用if语句2 课后练习