我需要在给定特定条件的情况下获取第一个循环的下一个项目,但条件是在内循环中。有没有比这更短的方法呢? (测试代码)
ok = 0
for x in range(0,10):
if ok == 1:
ok = 0
continue
for y in range(0,20):
if y == 5:
ok = 1
continue
在这种情况下怎么样?
for attribute in object1.__dict__:
object2 = self.getobject()
if object2 is not None:
for attribute2 in object2:
if attribute1 == attribute2:
# Do something
#Need the next item of the outer loop
第二个例子显示了我目前的情况。我不想发布原始代码,因为它是西班牙语。 object1和object2是两个非常不同的对象,一个是对象关系映射的性质,另一个是webcontrol。但是在某些情况下,它们中的2个属性具有相同的值,我需要跳转到外循环的下一个项目。
答案 0 :(得分:8)
用continue
替换内循环中的break
。你想要做的是实际打破内循环,所以continue
与你想要的相反。
ok = 0
for x in range(0,10):
print "x=",x
if ok == 1:
ok = 0
continue
for y in range(0,20):
print "y=",y
if y == 5:
ok = 1
break
答案 1 :(得分:2)
您始终可以转换为while循环:
flag = False
for x in range(0, 10):
if x == 4:
flag = True
continue
变为
x = 0
while (x != 4) and x < 10:
x += 1
flag = x < 10
没有必要更简单,但更好的imho。
答案 2 :(得分:2)
您的示例代码等同于(看起来不像您想要的):
for x in range(0, 10, 2):
for y in range(20):
if y == 5:
continue
要在外循环中不使用continue
跳到下一个项目:
it = iter(range(10))
for x in it:
for y in range(20):
if y == 5:
nextx = next(it)
continue
答案 3 :(得分:0)
所以你不是在追求这样的事情吗?我假设你正在通过键来循环到字典,而不是你的例子中的值。
for i in range(len(object1.__dict__)):
attribute1 = objects1.__dict__.keys()[i]
object2 = self.getobject() # Huh?
if object2 is not None:
for j in range(len(object2.__dict__)):
if attribute1 == object2.__dict__.keys()[j]:
try:
nextattribute1 = object1.__dict__.keys()[i+1]
except IndexError:
print "Ran out of attributes in object1"
raise
答案 4 :(得分:0)
我并不完全清楚你想要什么,但是如果你正在为内循环中产生的每个项目测试一些内容,any
可能就是你想要的(docs)
>>> def f(n): return n % 2
...
>>> for x in range(10):
... print 'x=', x
... if f(x):
... if any([y == 8 for y in range(x+2,10)]):
... print 'yes'
...
x= 0
x= 1
yes
x= 2
x= 3
yes
x= 4
x= 5
yes
x= 6
x= 7
x= 8
x= 9