Python:有类似C的for循环吗?
我可以在Python中执行类似的操作吗Python:有类似C的for循环吗?,python,for-loop,Python,For Loop,我可以在Python中执行类似的操作吗 for (i = 0; i < 10; i++): if someCondition: i+=1 print i 是的,我会这样做的 >>> for i in xrange(0, 10): ... if i == 4: ... continue ... print i, ... 0 1 2 3 5 6 7 8 9 编辑 根据对原始问题的更新。。。我建议您查看一下您应该使用cont
for (i = 0; i < 10; i++):
if someCondition:
i+=1
print i
是的,我会这样做的
>>> for i in xrange(0, 10):
... if i == 4:
... continue
... print i,
...
0 1 2 3 5 6 7 8 9
编辑根据对原始问题的更新。。。我建议您查看一下您应该使用
continue
跳过C和Python中的值
for i in range(10):
if someCondition:
continue
print(i)
奇怪的方式:
for x in (x for x in xrange(10) if someCondition):
print str(x)
你可能实际上不需要索引,你可能需要实际的项目。更好的解决方案可能是这样的:
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
...
sequence = 'whatever'
for item in sequence:
if some_condition:
continue
do_stuff_with(item)
将只显示不能被3整除的值。有两件事可以解决您的问题:
- 需要逗号分隔的参数,这些参数将被分组为以下选项值,您可以使用
,或者任何其他模块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)
for i in range(0,len(argv)):
arg = argv[i]
您的问题似乎是不应该循环原始参数,而应该循环已解析的参数。我建议你考虑改变你不使用标准模块的决定(类似于其他模块)。 < p>你可以先将ARGV列表转换成生成器:< /P>
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
(i=0;i<10;i++)的
如果出现以下情况:
i+=1
打印i
在python中,将编写为
i = 0
while i < 10
if someCondition
i += 1
print i
i += 1
i=0
当我<10
如果有某种情况
i+=1
打印i
i+=1
这就是用python编写c for循环的方法
increament = 4 #say
for i in range(n):
#write your code here
n=n+increment
如果您只想通过跳过4个成员来迭代数组,那么这可能是问题的简单解决方案。您可以确保索引在
try…finally
块中递增。这解决了希望继续
到下一个索引而不必复制/通过i+=1
的常见问题。这是C-likefor
循环提供的主要优势之一
使用try…finally
的主要缺点是必须再次缩进代码。但是,如果您有一个while
循环,其中包含许多continue
条件,那么它可能是值得的
例子
此示例演示了i
在finally
块中仍然会递增,即使调用了continue
。如果i
不增加,它的值将永远保持不变,而while
循环将变得无限大
i=0
当我<10时:
尝试:
印刷品(一)
如果i%2==0:
持续
最后:
i+=1
如果没有它,您必须在调用continue
之前增加i
i=0
当我<10时:
印刷品(一)
如果i%2==0:
i+=1#重复代码
持续
i+=1
你到底想做什么?更新了问题并提供了更多信息…你总是可以在的同时。一天中的任何时候我都会在for循环上使用迭代器,但是我想不出在我的情况下使用迭代的方法-请参阅更新的问题+1以了解optpasse
。手动解析命令行参数是完全不必要的。显然,optparse在2.7中已经过时,新的风格称为argparse。他们似乎都能做我需要的事情,但我想知道这是否值得学习。不管怎样,+1用来指出这个模块。这和在列表上迭代有什么不同?这主意不错,但是为什么要将sys.argv[1://code>转换为生成器实例而不是迭代器呢?例如,my_gen=iter(sys.argv[1:])
将获得与函数g
相同的结果。此外,不要使用而使用尝试:除了StopIteration:
for循环将实现相同的结果。简单地说:用于my_gen中的arg
。您仍然可以在循环中使用my_gen.next()
。使用argv作为堆栈的想法非常适合我的需要,并且它删除了对列表的基于索引的访问。我喜欢当人们除了问题@Cristi yes的答案之外提供所有建议,但这是问题中的原始示例代码,所以我认为这是他想要的。
for (i = 0; i < 10; i++)
if someCondition:
i+=1
print i
i = 0
while i < 10
if someCondition
i += 1
print i
i += 1
increament = 4 #say
for i in range(n):
#write your code here
n=n+increment