我可以在Python中做这样的事情吗?
for (i = 0; i < 10; i++):
if someCondition:
i+=1
print i
我需要能够根据条件跳过一些值
编辑:到目前为止,所有解决方案都建议根据已知条件以这种或那种方式修剪初始范围。这对我没用,所以让我解释一下我想做什么。
我想手动(即没有getopt)解析一些cmd行args,其中每个'keyword'都有一定数量的参数,如下所示:
for i in range(0,len(argv)):
arg = argv[i]
if arg == '--flag1':
opt1 = argv[i+1]
i+=1
continue
if arg == '--anotherFlag':
optX = argv[i+1]
optY = argv[i+2]
optZ = argv[i+3]
i+=3
continue
...
答案 0 :(得分:21)
是的,我就是这样做的
>>> for i in xrange(0, 10):
... if i == 4:
... continue
... print i,
...
0 1 2 3 5 6 7 8 9
修改强>
根据您原始问题的更新...我建议您查看optparse
答案 1 :(得分:8)
您可以采取两项措施来解决问题:
getopt
或任何其他模块。或做更脆弱的自己处理:
sys.argv.pop()
cmd = {}
while sys.argv:
arg = sys.argv.pop(0)
if arg == '--arg1':
cmd[arg] = sys.argv.pop(0), sys.argv.pop(0)
elif:
pass
print(cmd)
答案 2 :(得分:8)
for (i = 0; i < 10; i++)
if someCondition:
i+=1
print i
在python中将写成
i = 0
while i < 10
if someCondition
i += 1
print i
i += 1
你去了,就是如何在python中编写一个c for循环。
答案 3 :(得分:5)
奇怪的方式:
for x in (x for x in xrange(10) if someCondition):
print str(x)
答案 4 :(得分:3)
您应该使用continue
来跳过C和Python中的值。
for i in range(10):
if someCondition:
continue
print(i)
答案 5 :(得分:2)
你可能实际上并不需要索引,你可能需要实际的项目。一个更好的解决方案可能是这样的:
sequence = 'whatever'
for item in sequence:
if some_condition:
continue
do_stuff_with(item)
答案 6 :(得分:1)
您可以先将argv列表转换为生成器:
def g(my_list):
for item in my_list:
yield item
然后您可以逐步执行这些项目,根据需要调用生成器:
my_gen = g(sys.argv[1:]):
while True:
try:
arg = my_gen.next()
if arg == "--flag1":
optX = my_gen.next()
opyY = my_gen.next()
--do something
elif arg == "--flag2":
optX = my_gen.next()
optY = my_gen.next()
optZ = my_gen.next()
--do something else
...
except StopIteration:
break
答案 7 :(得分:0)
您可以确保在try...finally
块内增加索引。这解决了一个常见问题,即想要continue
到下一个索引而不必在各处复制/粘贴i += 1
。这是类似C的for
循环提供的主要优势之一。
使用try...finally
的主要缺点是必须再次缩进代码。但是如果您有一个while
循环且包含许多continue
个条件,则可能值得。
此示例说明,即使调用了i
,finally
仍在continue
块中递增。如果i
不增加,其值将永远保留,并且while
循环将变为无限。
i = 0
while i < 10:
try:
print(i)
if i % 2 == 0:
continue
finally:
i += 1
没有它,您必须在调用i
之前增加continue
。
i = 0
while i < 10:
print(i)
if i % 2 == 0:
i += 1 # duplicate code
continue
i += 1
答案 8 :(得分:-1)
for i in xrange(0, 10):
if i % 3 == 0
continue
print i
只会出现不能被3整除的值。
答案 9 :(得分:-1)
如果您需要迭代某些内容,和需要索引,请使用enumerate()
for i, arg in enumerate(argv):
...
与提问者的
相同for i in range(0,len(argv)):
arg = argv[i]
答案 10 :(得分:-1)
你的问题似乎是你应该循环不是原始参数而是解析参数。我建议你考虑改变你不使用标准模块的决定(和其他人一样)。
答案 11 :(得分:-1)
increament = 4 #say
for i in range(n):
#write your code here
n=n+increment
如果您只想通过跳过4个成员来遍历数组,这可能是问题的简单解决方案