迭代两个列表的更好方法

时间:2014-03-05 03:33:34

标签: python list

我有两个列表,例如XY

我想迭代它们,找出我当前的列表,然后执行特定于列表的操作。

我这样做:

for e in [x, y]:
    if e == x: doSomethingOnElementsOfX();
    if e == y: doSomethingOnElementsOfY();

有更好的方法吗?我不关心速度,只想知道这种情况是否有更好的语法。

3 个答案:

答案 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)