kin*_*all 10
十分之九,如果你正在编写for迭代一系列数字的Python 循环,然后使用这些数字索引到一个列表或其他容器中,那你做错了.换句话说,而不是这样做:
for i in range(len(container)):
print container[i]
Run Code Online (Sandbox Code Playgroud)
你应该这样做:
for item in container:
print item
Run Code Online (Sandbox Code Playgroud)
可是等等!你反对.如果我需要索引怎么办,因为我要以某种方式修改项目?Pythonic的方法是使用enumerate()内置函数.
for i, item in enumerate(container):
print item
container[i] += 1
Run Code Online (Sandbox Code Playgroud)
如果您不介意制作列表副本,那么列表理解通常是最佳选择:
container = [item + 1 for item in container]
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要修改列表,请尝试此操作,它将切片分配(替换现有列表)和生成器表达式(懒惰地修改项目)组合在一起:
container[:] = (item + 1 for item in container)
Run Code Online (Sandbox Code Playgroud)
是的,for i in range(upper + 1)或者如果你愿意,for i in range(lower, upper + 1)会工作,
许多编程语言使用从零开始的索引,因此非包容性上限是一种常见做法(这是由于内存寻址和添加偏移量)
举个例子:如果你有一个大小为5的数组ar,从索引0开始,你最大的有效索引值将是4(即0,1,2,3,4),但你的循环结构会引用大小数组(5)如下:
for i in range(5):
或更常见和更好:
for i in range(len(ar)):
..确保您只获得合法的索引值0 .. 4.
| 归档时间: |
|
| 查看次数: |
4885 次 |
| 最近记录: |