2

可能重复:
在 Python for 循环中访问索引

我想知道:Python 有类似的东西吗?

for (i=0; i < length; i += 1){ .... }

当然,我可以说

i = 0
for item in items:
 #.....
 i += 1

但我认为应该有类似的东西for(i = 0;...),不是吗?

4

3 回答 3

11

使用enumerate()功能

for i, item in enumerate(items):
     print i, item

或使用range()

for i in range(len(items)):
     print i

(在 python 2 上你会使用xrange())。

range()让您逐步完成i以下步骤1

>>> list(range(0, 5, 2))
[0, 2, 4]
>>> list(range(4, -1, -1))
[4, 3, 2, 1, 0]

不过,您通常不需要对序列使用索引;与itertoolsreversed()函数无关;涵盖了“特殊”索引值范围的大多数用例:

>>> menu = ['spam', 'ham', 'eggs', 'bacon', 'sausage', 'onions']
>>> # Reversed sequence
>>> for dish in reversed(menu):
...     print(dish)
... 
onions
sausage
bacon
eggs
ham
spam
>>> import itertools
>>> # Only every third
>>> for dish in itertools.islice(menu, None, None, 3):
...     print(dish)
... 
spam
bacon
>>> # In groups of 4
>>> for dish in itertools.izip_longest(*([iter(menu)] * 4)):
...     print(dish)
... 
('spam', 'ham', 'eggs', 'bacon')
('sausage', 'onions', None, None)
于 2012-10-20T11:06:59.207 回答
3

尝试这是一种经过深思熟虑的语言选择。大多数时候确实会遍历低级语言中的数字,这些数字被用作序列中的索引。对于确实需要数字的情况,应该使用range内置函数 - 它返回具有所需range([start], end, [step]) 输入值的迭代。

更常见的是,一个序列的项目和它们的索引都需要,在这种情况下,应该使用 builtnenumerate代替:

for index, letter in enumerate("word"):
     print index, letter

最后,在 C 和派生语言(Java、PHP、Javascript、C#、Objective C)中,for语法只是 while 循环的一些(非常粗略的)语法糖——您可以在 Python 中编写相同的 while 循环。

而不是: for (start_expr, check_expr, incr_expr) { code_body}你做:

start_expr
while check_expr:
    code_body
    incr_expr

它的工作原理完全相同。

于 2012-10-20T11:43:39.127 回答
0
for i in range(length):
    #do something

是什么range

于 2012-10-20T11:34:24.917 回答