我对python中双for循环的使用感到困惑,这是我的代码:
import numpy as np
range1 = np.linspace(1,6,10)
range2 = reversed(np.linspace(1,6,10))
for t1 in range1:
print t1
for t2 in range2:
print t1,t2
输出如下:
1.0
1.0 6.0
1.0 5.44444444444
1.0 4.88888888889
1.0 4.33333333333
1.0 3.77777777778
1.0 3.22222222222
1.0 2.66666666667
1.0 2.11111111111
1.0 1.55555555556
1.0 1.0
1.55555555556
2.11111111111
2.66666666667
3.22222222222
3.77777777778
4.33333333333
4.88888888889
5.44444444444
6.0
它只对外循环的第一个值执行内循环,为什么会发生这种情况?我怎样才能让它在第一个和第二个变量的所有组合上循环?
反向
返回一个迭代器。一个迭代器只能使用一次。
在第一次迭代中使用该迭代器。
要多次使用迭代器,您可以将其存储在list
中:
import numpy as np
range1 = np.linspace(1,6,10)
range2 = list(reversed(np.linspace(1,6,10))) # store in list
for t1 in range1:
print t1
for t2 in range2:
print t1,t2
迭代器的一个好处是永远不会计算整个列表。您可以在不创建整个[0,1,…,1000000]
列表的情况下迭代100万个元素,如果您的算法希望在满足条件时打破循环,这会更好。
在一个简单的例子中,比如在OP中,列表很短,并且你知道你将迭代所有元素,所以使用列表是非常简单和有效的。
在每个尊重pythons数据模型的实现中,反转
的结果只能耗尽一次(因为它应该返回一个在第一次遍历后耗尽的迭代器)。迭代器耗尽后,它将不再产生任何项目。但是您可以简单地使用切片来反转您的数组:
range2 = np.linspace(1,6,10)[::-1]
for t1 in range1:
print t1
for t2 in range2:
print t1,t2
numpy的基本切片。数组
s的性能非常好,它甚至不需要复制原件。
考虑到您使用的是
array
s,您应该意识到迭代它们是一个非常缓慢的操作,因为在迭代过程中,每个值都需要取消绑定。如果你真的需要迭代一维数组
s(提示:你通常不需要),你应该把它们转换成列表
s:
range1 = np.linspace(1,6,10).tolist()
range2 = np.linspace(1,6,10)[::-1].tolist()
因为与
for
-循环中的(隐式)解装箱相比,tolist
在解装箱时更有效。
reversed()
生成迭代器;一旦到达迭代器的末尾,就不能重复使用它:
>>> it = reversed([1, 2, 3])
>>> list(it)
[3, 2, 1]
>>> list(it)
[]
为嵌套循环创建新的迭代器:
for t1 in range1:
print t1
for t2 in reversed(range1):
print t1,t2
反转()
留档链接到迭代器词汇表条目:
当没有更多数据可用时,将引发StopIteration
异常。此时,迭代器对象已耗尽,对其__next__()
方法的任何进一步调用只需再次引发StopIteration
。
我的。
我想在一个并行外部循环中运行一个包含for循环(应该并行运行)的函数。因此看起来如下所示: 给定上面的代码,我希望在函数中为循环创建5个并行线程,并且希望这5个线程中的每个线程创建另一个线程来运行自己的并行for循环。
我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:
我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?
我有一个嵌套的for循环,但是它会减慢一点处理速度,我如何才能使嵌套循环高效。我需要的是对于外循环的每个值,内循环继续其所有迭代。但是,我不认为它会像两个嵌套循环那样影响计算。我的第二个问题是,循环会影响速度还是会支持我的现象? 我的代码:
我一直在读一本面向初学者的书,“第一头HTML5编程”,其中有这样一段代码: 目前,如果我调用,它将返回下一次显示是在下午5:00。我将循环条件更改为“I<=movie.showtimes.length;”但它仍然只运行一次,并且只显示下午5点。循环只迭代一次,即使我重写了这个函数: 不是应该跑两次吗?
和其他编程语言一样, Java 允许循环嵌套。如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环。 嵌套循环既可以是 for循环嵌套 while 循环,也可以是 while 循环嵌套 do-while 循环 …… 即各种类型的循环都可以作为外层循环,也可以作为内层循环。 当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只是