2020-11-16

本文介绍了Python中for循环的使用,强调其与C或Pascal的不同,特别是对于序列的迭代。同时,详细讲解了range()函数的用法,包括如何生成等差数列以及如何通过步进值来定制序列。还提到了在迭代过程中修改序列的注意事项,并展示了利用enumerate()函数优化迭代的示例。最后,讨论了range()对象作为可迭代对象的概念。
摘要由CSDN通过智能技术生成

for 语句
Python 中的 for 语句和 C 或 Pascal 中的略有不同。通常的循环可能会依据一个等差数值步进过程(如 Pascal),或由用户来定义迭代步骤和中止条件(如 C ),Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。例如(没有暗指):

Measure some strings:

… words = [‘cat’, ‘window’, ‘defenestrate’]

for w in words:
… print(w, len(w))

cat 3
window 6
defenestrate 12
在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点:

for w in words[:]: # Loop over a slice copy of the entire list.
… if len(w) > 6:
… words.insert(0, w)

words
[‘defenestrate’, ‘cat’, ‘window’, 'defene
4.3. range() 函数
如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差级数链表:

for i in range(5):
… print(i)

0
1
2
3
4
range(10) 生成了一个包含 10 个值的链表,它用链表的索引值填充了这个长度为 10 的列表,所生成的链表中不包括范围中的结束值。也可以让 range() 操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为 “步长”):
range(5, 10)
5 through 9

range(0, 10, 3)
0, 3, 6, 9

range(-10, -100, -30)
-10, -40, -70
需要迭代链表索引的话,如下所示结合使 用 range() 和 len()

a = [‘Mary’, ‘had’, ‘a’, ‘little’, ‘lamb’]
for i in range(len(a)):
… print(i, a[i])

0 Mary
1 had
2 a
3 little
4 lamb
不过,这种场合可以方便的使用 enumerate(),请参见 循环技巧。

如果你只是打印一个序列的话会发生奇怪的事情:

print(range(10))
range(0, 10)
在不同方面 range() 函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。

我们称此类对象是 可迭代的,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。我们已经见过的 for 语句就是这样一个迭代器。list() 函数是另外一个( 迭代器 ),它从可迭代(对象)中创建列表:

list(range(5))
[0, 1, 2, 3, 4]
稍后我们会看到更多返回可迭代(对象)和以可迭代(对象)作为参数的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值