首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >For循环(新手)

For循环(新手)
EN

Stack Overflow用户
提问于 2012-05-04 07:00:34
回答 5查看 5.5K关注 0票数 8

我最近开始学习Python,for循环的概念对我来说仍然有点困惑。据我所知,它通常遵循for x in y格式,其中y只是一些列表。

for-each循环for (int n: someArray)变为for n in someArray

并且可以用for i in range(0, 9, -2)来表示for循环for (i = 0; i < 9; i-=2)

假设我想要的不是常量增量,而是i*=2,甚至i*=i。这是可能的吗,或者我必须使用while循环来代替?

EN

回答 5

Stack Overflow用户

发布于 2012-05-04 07:08:13

正如您所说,for循环遍历列表的元素。该列表可以包含您喜欢的任何内容,因此您可以预先构建一个包含每个步骤的列表。

for循环还可以遍历"generator",这是一小段代码,而不是实际的列表。在Python语言中,range()实际上是一个生成器(在Python2.x中,range()返回一个列表,而xrange()是生成器)。

例如:

代码语言:javascript
复制
def doubler(x):
    while True:
        yield x
        x *= 2

for i in doubler(1):
    print i

上面的for循环将打印出来

代码语言:javascript
复制
1
2
4
8

依此类推,直到您按下Ctrl+C键。

票数 12
EN

Stack Overflow用户

发布于 2012-05-04 07:15:19

您可以使用generator expression来高效地完成此操作,并且只需很少的额外代码:

代码语言:javascript
复制
for i in (2**x for x in range(10)): #In Python 2.x, use `xrange()`.
    ...

生成器表达式的工作方式类似于定义手动生成器(如在Greg Hewgill's answer中),语法类似于列表理解。它们的评估是惰性的-这意味着它们不会在操作开始时生成列表,这可以在大型可迭代程序上带来更好的性能。

因此,这个生成器的工作方式是等待,直到系统要求它提供一个值,然后向range(10)请求一个值,将该值加倍,然后将其传递回for循环。它重复执行此操作,直到range()生成器不再生成任何值。

票数 8
EN

Stack Overflow用户

发布于 2012-05-04 07:19:48

请记住,Python的“list”部分可以是任何可迭代的序列。

示例:

一个字符串:

代码语言:javascript
复制
for c in 'abcdefg':
   # deal with the string on a character by character basis...

一个文件:

代码语言:javascript
复制
with open('somefile','r') as f:
    for line in f:
         # deal with the file line by line

一本字典:

代码语言:javascript
复制
d={1:'one',2:'two',3:'three'}
for key, value in d.items():
   # deal with the key:value pairs from a dict

列表的一部分:

代码语言:javascript
复制
l=range(100)
for e in l[10:20:2]:
    # ever other element between 10 and 20 in l 

等等等等

所以它真的比‘只是一些列表’深刻得多

正如其他人所说的,只需将迭代器设置为您想要的值即可:

代码语言:javascript
复制
 for e in (i*i for i in range(10)):
     # the squares of the sequence 0-9...

 l=[1,5,10,15]
 for i in (i*2 for i in l):
     # the list l as a sequence * 2...
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10440493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档