如何在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的剂量如何?
答案 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++;
}
(break
和continue
存在一些并发症,但我们现在暂时忽略它们。)
此重写还表明了在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