Python:有类似C的for循环吗?

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

我可以在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
编辑

根据对原始问题的更新。。。我建议您查看一下您应该使用
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-like
for
循环提供的主要优势之一

使用
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