如何在Python for循环中使用多个条件?

时间:2011-07-27 04:48:21

标签: python

如何在Python for循环中使用多个条件?

for example in java:
    int[] n={1,2,3,4,6,7};
    for(int i=0;i<n.length && i<5 ;i++){
      //do sth
    }

python for loop的剂量如何?

7 个答案:

答案 0 :(得分:17)

Python for循环本身没有任何支持。您可以使用break语句获得相同的效果:

for i in range(1, 8):
    if i >= 5:
        break
    # do something

在Python中,for实际上是foreach,它迭代某些“迭代器”或某些“可迭代对象”。在Python 2.x中,上面的for循环构建一个包含数字1到7的列表,然后迭代列表;在Python 3.x中,上面的循环得到一个“迭代器对象”,它产生1到7的值,一次一个。 (不同之处在于range()函数及其返回的内容。在Python 2.x中,您可以使用xrange()来获取迭代器对象,而不是分配列表。)

我没有显示您的n对象,因为i将设置为与其中相同的值。如果你实际上有一些迭代的列表,那么直接迭代它而不是使用变量i来索引列表是很好的Python。如果您仍然需要索引变量,可以使用enumerate()来获取它,如下所示:

n = [3, 5, 10, "cat", "dog", 3.0, 4.0]  # list can contain different types
for i, value in enumerate(n):
    if i >= 5:
        break
    # do something with value

答案 1 :(得分:8)

与Java代码等效的 direct 是一个while循环:

n = [1, 2, 3, 4, 6, 7]
i = 0
while i < len(n) and i < 5:
    # do sth
    i += 1

你也可以这样做:

n = [1, 2, 3, 4, 6, 7]
for x in n[:5]:
    # do sth

答案 2 :(得分:4)

您可以使用相同类型的逻辑编写while循环(但在Python中,&&拼写为and,而||拼写为or );或者你可以使用迭代序列的for循环,然后添加额外的逻辑来打破循环。

在Python中,我们不希望使用整数来索引容器。这实际上会破坏我们的很多代码,因为我们不会在编译时检查数据类型,并且某些容器无法编入索引。想要索引到一个容器已经是一种设计气味:事实上,所有东西都在一个顺序容器中,这意味着没有任何元素是“特殊的”,或者我们会将它们分开。迭代是迭代,我们不应该竭尽全力使它更复杂。

答案 3 :(得分:4)

以下是使用 for 循环的两个或多个条件的一种方法,这就是问题实际上要求的。我想说的是,它可以完成,但不是非常pythonic,尝试从另一种语言逐行重写代码通常不是一个好主意。

from itertools import takewhile, count
n=[1,2,3,4,6,7]
for i in takewhile(lambda i:i<len(n) and i<5, count()):
     print(i)

答案 4 :(得分:3)

假设你想在循环的某个地方使用n的第i项,enumerate使我们无法在整个地方输入n[i] - 该值将存储在变量item < / p>

n = [1,2,3,4,6,7]
for i, item in enumerate(n):
  if i>=5:
    break
  # do something
  print item       # for example

请注意,如果n的长度小于5

,循环将自动终止

答案 5 :(得分:1)

Python的for与基于C语法的语言中的for不同。在Python中,for遍历序列,而在C中,它在条件为真时循环。这是一个巨大的差异。

类似C的for可以用以下代码粗略替换:

i = 0;
while (i < n.length && i < 5) {
    // do sth
    i++;
}

breakcontinue存在一些并发症,但我们现在暂时忽略它们。)

此重写还表明了在Python中执行所需操作的方法:使用while

i = 0
while i < len(n) and i < 5:
    // do something
    i += 1

但是,在您的特定情况下,最简单的方法是将for与合适的索引列表一起使用:

for i in range(min(len(n), 5)):
    // do something

range将返回一个整数列表(0,1,2,...),你想要的是让列表最多为5,或者数组的长度,以较小者为准。上面的代码实现了这一点。

答案 6 :(得分:0)

Python中的for语句迭代对象的“列表”(我将列表放在引号中,因为我的意思是它在一般意义上,它可以迭代任何可迭代的东西)。

要编写条件循环(而不是迭代直到完成),请使用while:

n = [1, 2, 3, 4, 6, 7]
i = 0
while i < len(n) and i < 5:
    # do stuff
    i += 1

现在只是为了完成,你的例子也可以写成:

n = [1, 2, 3, 4, 6, 7]
for i in range(0,min(len(n),5)):
    # do stuff

或:

n = [1, 2, 3, 4, 6, 7]
for i in range(0,len(n)):
    if i >= 5:
        break
    # do stuff