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

时间:2010-07-28 15:13:45

标签: python for-loop

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

    ...

12 个答案:

答案 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个条件,则可能值得。

示例

此示例说明,即使调用了ifinally仍在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个成员来遍历数组,这可能是问题的简单解决方案