在Java中,我有以下for循环,我正在学习Python:
for (int index = last-1; index >= posn; index--)
Run Code Online (Sandbox Code Playgroud)
对于大多数熟悉Python的人来说,我的问题很简单并且可能很明显.我想在Python中编写'for'循环代码.我怎样才能做到这一点?
我试着做以下事情:
for index in range(last-1, posn, -1):
Run Code Online (Sandbox Code Playgroud)
我认为应该是range(last-1, posn + 1, -1).我对吗?
我很感谢能够向我解释如何理解Python中的索引工作的人.
Loo*_*cid 30
python中的range函数具有以下语法:
range(start, end, step)
它具有与python列表相同的语法,其中start是包含但是end是独占的.
因此,如果你想从5到1计数,你会使用range(5,0,-1),如果你想从数last到posn你将使用range(last, posn - 1, -1).
cha*_*elo 11
在python中,当你有一个iterable时,通常你会迭代而没有索引:
letters = 'abcdef' # or a list, tupple or other iterable
for l in letters:
print(l)
Run Code Online (Sandbox Code Playgroud)
如果需要以相反的顺序遍历iterable,则可以:
for l in letters[::-1]:
print(l)
Run Code Online (Sandbox Code Playgroud)
当您出于任何原因需要索引时,您可以使用enumerate:
for i, l in enumerate(letters, start=1): #start is 0 by default
print(i,l)
Run Code Online (Sandbox Code Playgroud)
你也可以按相反的顺序枚举......
for i, l in enumerate(letters[::-1])
print(i,l)
Run Code Online (Sandbox Code Playgroud)
另一个注意事项...
通常当我们遍历一个iterable时,我们会对每个元素应用相同的过程或函数.在这些情况下,最好使用map:
如果我们需要对每封信进行首映:
map(str.upper, letters)
Run Code Online (Sandbox Code Playgroud)
或者获取每个字母的Unicode代码:
map(ord, letters)
Run Code Online (Sandbox Code Playgroud)
首先,我建议您可以尝试使用print并观察操作:
for i in range(0, 5, 1):
print i
Run Code Online (Sandbox Code Playgroud)
结果:
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
您可以了解功能原理。实际上,range扫描范围是从0到5-1。等于0 <= i < 5
当您真正了解python中的for循环时,我认为我们该回到业务了。让我们集中解决您的问题。
您想在python中使用DECREMENT for循环。我建议例如一个for循环教程。
for i in range(5, 0, -1):
print i
Run Code Online (Sandbox Code Playgroud)
结果:
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)
因此可以看出,它等于 5 >= i > 0
您想在python中实现Java代码:
for (int index = last-1; index >= posn; index--)
Run Code Online (Sandbox Code Playgroud)
它应该这样编码:
for i in range(last-1, posn-1, -1)
Run Code Online (Sandbox Code Playgroud)