如何在Python的循环中使用多个条件?
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循环是如何实现这个的?
如何在Python的循环中使用多个条件?
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循环是如何实现这个的?
Python的for
循环本身不支持此功能。您可以使用break
语句实现相同的效果:
n = [1, 2, 3, 4, 6, 7]
for i in n:
if i >= 5:
break
# do something with i
在Python中,for
实际上是一个迭代器(iterator)或可迭代对象(iterable object)的foreach
。即使你只想重复特定次数,也是如此:
for i in range(1, 8):
# do something with i
在Python 2.x中,上述的for循环会构建一个包含从1到7(包括1和7)的数字列表,然后遍历该列表;而在Python 3.x中,上述循环会获得一个“迭代器对象”,该对象一次提供一个值,其值为1到7(包括1和7)。(区别在于range()函数以及它返回的内容。在Python 2.x中,您可以使用xrange()来获取一个迭代器对象,而不是分配一个列表。)n = [3, 5, 10, "cat", "dog", 3.0, 4.0] # list can contain different types
for i, value in enumerate(n):
# we only want to process the first 5 values in this list
if i >= 5:
break
# do something with value
编辑:解决上述问题的另一种方法是使用列表切片。
for value in n[:5]:
# do something with value
如果n
是一个列表,这段代码可以正常工作。这个for
循环将会依次从列表中取出元素赋值给value
变量,当处理完5个元素或者列表已经没有剩余元素的时候停止。即使请求的切片长度超过了实际列表的长度也不会出错。
如果想要使用上面的技巧但仍然希望代码可以与迭代器一起工作,可以使用itertools.islice()
函数:
from itertools import islice
for value in islice(n, 5):
# do something with value
这将适用于列表、迭代器、生成器和任何类型的可迭代对象。
与切片列表一样,for
循环将获取最多5个值,并且请求一个比可迭代对象实际拥有的值更多的 islice()
不会报错。
您Java代码的直接等价物是一个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
以下是使用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)
while
循环(但在Python中,&&
被拼写为and
,||
被拼写为or
)。或者,您可以使用迭代序列的for循环,然后添加额外的逻辑以退出循环。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或数组的长度,以较小者为准。上面的代码实现了这一点。
enumerate
可以避免反复输入 n[i]
- 值将存储在变量 item
中。n = [1,2,3,4,6,7]
for i, item in enumerate(n):
if i>=5:
break
# do something
print item # for example
for i, item in enumerate(n)[:5]:
怎么样? - machine yearningenumerate(n[:5])
? - John La Rooyn = [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