我有两个列表,例如X
和Y
。
我想迭代它们,找出我当前的列表,然后执行特定于列表的操作。
我这样做:
for e in [x, y]:
if e == x: doSomethingOnElementsOfX();
if e == y: doSomethingOnElementsOfY();
有更好的方法吗?我不关心速度,只想知道这种情况是否有更好的语法。
答案 0 :(得分:1)
如果你有两个相同大小的列表,你可以在一个循环中迭代这两个列表,例如(在Java中):
for (int i = 0; i < listSize; i++) {
if e == x: doSomethingOnElementsOfX();
if e == y: doSomethingOnElementsOfY();
}
否则你需要做两个单独的循环,例如:
for (int i = 0; i < X.listSize; i++) {
if e == x: doSomethingOnElementsOfX();
}
for (int i = 0; i < Y.listSize; i++) {
if e == y: doSomethingOnElementsOfY();
}
这是一种蛮力的方式。如果获得更多信息,您可以获得更合适的解决方案。
答案 1 :(得分:0)
我采用的方法是迭代元组,其中额外元素指示标志变量,或者任何不同的元素,例如:
for (should_chomp, cur) in ((True, x), (False, y)):
complicated_stuff(cur)
really_takes_code(cur)
but_mostly_the_same(cur)
do_the_different_thing_though(cur, should_chomp)
答案 2 :(得分:0)
Python提供了一个名为zip的内置函数,可以为您执行此操作。 zip同时迭代任意数量的列表。只要列表长度相同,这应该有效,如下所示:
for e_in_x, e_in_y in zip(x, y):
doSomethingOnElementsOfX(e_in_x)
doSomethingonElementsOfY(e_in_y)
对于其他更复杂的列表迭代类型,有一个很棒的python模块叫itertools,它具有很强的功能,可以用不同的方式迭代集合。
例如,如果两个列表的长度不同,您可以这样做:
for ex, ey in itertools.izip_longest(x, y, fillvalue=None):
if ex:
doSomethingOnElementsOfX(ex)
if ey:
doSomethingOnElementsOfY(ey)