python 中 'for i in range(1,len(a)):' 的缩写
Short for 'for i in range(1,len(a)):' in python
在python中,有没有简写for i in range(len(l)):
的方法?
我知道我可以使用 for i,_ in enumerate(l):
,但我想知道是否有其他方法(没有 _
)。
请不要说 for v in l
因为我需要索引(例如比较连续值 l[i]==l[i+1]
)。
如果你想比较连续的元素,你不需要使用索引。您可以使用 zip()
代替:
for el1, el2 in zip(l, l[1:]):
或无论如何使用enumerate()
:
for el2idx, el1 in enumerate(l[:-1], 1):
el2 = l[el2idx]
如果你真的必须生成只是和索引,那么range(len(l))
就足够短了,没有更短的形式。
你可以通过定义一个函数来缩短它:
def r(lst):
return range(len(lst))
然后:
for i in r(l):
...
少了9个字!
有需要迭代索引的用例,但它们并不常见以证明更简洁的语法是合理的。即使是您给出的在列表中查找重复项的示例,也可以在没有索引的情况下轻松(并且可以说更具可读性)完成。例如:
it = iter(items)
last = next(items, None)
for item in it:
if item == last:
print "Duplicate:", item
break
else:
last = item
else:
print "No duplicate found."
(您也可以使用 zip()
,如 Martijn 所示。)
在python中,有没有简写for i in range(len(l)):
的方法?
我知道我可以使用 for i,_ in enumerate(l):
,但我想知道是否有其他方法(没有 _
)。
请不要说 for v in l
因为我需要索引(例如比较连续值 l[i]==l[i+1]
)。
如果你想比较连续的元素,你不需要使用索引。您可以使用 zip()
代替:
for el1, el2 in zip(l, l[1:]):
或无论如何使用enumerate()
:
for el2idx, el1 in enumerate(l[:-1], 1):
el2 = l[el2idx]
如果你真的必须生成只是和索引,那么range(len(l))
就足够短了,没有更短的形式。
你可以通过定义一个函数来缩短它:
def r(lst):
return range(len(lst))
然后:
for i in r(l):
...
少了9个字!
有需要迭代索引的用例,但它们并不常见以证明更简洁的语法是合理的。即使是您给出的在列表中查找重复项的示例,也可以在没有索引的情况下轻松(并且可以说更具可读性)完成。例如:
it = iter(items)
last = next(items, None)
for item in it:
if item == last:
print "Duplicate:", item
break
else:
last = item
else:
print "No duplicate found."
(您也可以使用 zip()
,如 Martijn 所示。)