我想知道:Python有类似的东西吗?
for (i=0; i < length; i += 1){ .... }
当然,我可能会说
i = 0
for item in items:
#.....
i += 1
但我认为应该有类似for(i = 0;...)
的内容,不应该吗?
答案 0 :(得分:11)
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]
你通常不需要为序列使用索引;不是itertools
library或reversed()
function;大多数用于“特殊”索引值范围的用例都包括在内:
>>> 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)
答案 1 :(得分:3)
尝试这是一种刻意的语言选择。大部分时间都会循环使用较低级语言中的数字,这些数字用作序列中的索引。对于实际需要数字的情况,应该使用range
内置函数 - 它返回一个具有所需range([start], end, [step])
输入值的iterable。
更常见的是,确实需要序列的项目及其索引,在这种情况下,应该使用内置的enumerate
代替:
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
它的工作方式完全相同。
答案 2 :(得分:0)
for i in range(length):
#do something