use*_*037 23 python for-loop range
如果我写
for i in range(5):
print i
Run Code Online (Sandbox Code Playgroud)
然后它给出0,1,2,3,4这
是否意味着Python同时为0分配0,1,2,3,4?
但是,如果我写道:
for i in range(5):
a=i+1
Run Code Online (Sandbox Code Playgroud)
然后我打电话给a,它只给5
但是如果我加''打印''它给出1,2,3,4,5
所以我的问题是这里的区别是什么?
是字符串还是列表还是其他什么?
或者也许任何人都可以帮助我理清:
for l in range(5):
#vs,fs,rs are all m*n matrixs,got initial values in,i.e vs[0],fs[0],rs[0] are known
#want use this foor loop to update them
vs[l+1]=vs[l]+fs[l]
fs[l+1]=((rs[l]-re[l])
rs[l+1]=rs[l]+vs[l]
#then this code gives vs,fs,rs
Run Code Online (Sandbox Code Playgroud)
如果我运行这种代码,那么只有当l = 5时我才能得到答案
我怎样才能让它们开始循环?
即l = 0得到vs [1],fs [1],rs [1]的值,
则l = 1得到vs [2],rs [2],fs [2] ......的值等等.
但是python给出了不同的fs数组,vs,rs,对应不同的l值
我怎么能把它们做成一件?
ang*_*son 49
大多数(如果不是全部)编程语言中的"for循环"是一种不止一次运行一段代码的机制.
这段代码:
for i in range(5):
print i
Run Code Online (Sandbox Code Playgroud)
可以想到这样工作:
i = 0
print i
i = 1
print i
i = 2
print i
i = 3
print i
i = 4
print i
Run Code Online (Sandbox Code Playgroud)
所以你看,什么情况是不是i
得到值0,1,2,3,4 与此同时,而是顺序.
我假设当你说"叫a,它只给5"时,你的意思是这样的:
for i in range(5):
a=i+1
print a
Run Code Online (Sandbox Code Playgroud)
这将打印给出的最后一个值.每次循环迭代时,语句a=i+1
都会a
用新值覆盖最后一个值.
代码基本上按顺序从上到下运行,而for循环是一种使代码返回的方法,并且其中一个变量具有不同的值.
我希望这能回答你的问题.
Jim*_*nis 20
当我教某人编程(几乎任何语言)时,我引入for
了与此代码示例类似的术语循环:
for eachItem in someList:
doSomething(eachItem)
Run Code Online (Sandbox Code Playgroud)
...这很方便,是语法上有效的Python代码.
Python range()
函数simple返回或生成一个整数列表,从一些下限(零,默认情况下)直到(但不包括)某个上限,可能以某个其他数字(默认为1)的增量(步长).
因此range(5)
返回(或可能生成)一个序列:0,1,2,3,4(最多但不包括上限).
呼叫range(2,10)
将返回:2,3,4,5,6,7,8,9
致电range(2,12,3)
将返回:2,5,8,11
请注意,我说过几次Python的range()
函数返回或生成一个序列.这是一个相对高级的区别,通常对新手来说不是问题.在旧版本的Python中range()
构建了一个列表(为其分配内存并使用值填充)并返回对该列表的引用.对于可能消耗相当多内存的大范围而言,这可能是低效的,并且对于某些情况,您可能希望迭代某些可能较大范围的数字,但可能会break
早期" "退出循环(在找到某些特定项目之后)你感兴趣的,例如).
Python通过称为生成器的编程构造支持更有效的方法来实现相同的语义(做同样的事情).Python不是分配和填充整个列表并将其作为静态数据结构返回,而是可以使用必需信息(上限和下限以及步/增量值)实例化一个对象...并返回对它的引用.然后,该对象跟踪它最近返回的数字并计算新值,直到它达到上限(并且它使用称为"StopIteration"的异常将该序列的结尾发送给调用者).这种技术(动态地计算值而不是一次性地预先计算值)被称为"惰性评估".
然后,语言中的其他构造(例如for
循环中的那些构造)可以使用该对象,就像它是一个列表一样.
对于大多数情况,您不必知道您的Python版本是使用旧版本range()
还是基于生成器的较新版本.你可以使用它并且快乐.如果您正在处理数百万个项目的范围,或者每个项目创建数千个不同的范围,那么您可能会注意到range()
在旧版本的Python上使用时会降低性能.在这种情况下,您可以重新考虑您的设计和使用while
循环,或者创建实现生成器的"惰性评估"语义的对象,或者使用您的Python版本包含它的xrange()
版本,或者使用range()
Python版本中的range()
函数隐式使用生成器.
诸如生成器之类的概念以及更多一般形式的惰性求值,超越了基础知识,渗透到Python编程中.对于简单的编程任务,它们通常是您不必知道的事情,但是当您尝试使用更大的数据集或更严格的约束(例如,时间/性能或内存限制)时,它们会变得非常重要.
for i in range(5):
Run Code Online (Sandbox Code Playgroud)
是相同的
for i in [0,1,2,3,4]:
Run Code Online (Sandbox Code Playgroud)
range(x)
返回从0到x - 1 的数字列表.
>>> range(1)
[0]
>>> range(2)
[0, 1]
>>> range(3)
[0, 1, 2]
>>> range(4)
[0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
for i in range(x):
print i
对于返回的列表中的每个元素,执行一次主体(在第一个示例中)range()
.
i
在主体内部用于引用列表中的"当前"项.在这种情况下,i
指的是一个整数,但它可以是任何类型,具体取决于您循环的对象.
归档时间: |
|
查看次数: |
125323 次 |
最近记录: |