在python中将两个列表与迭代器函数链接在一起

时间:2010-12-05 23:54:48

标签: python python-2.6

我有两个列表,都有128个项目:

a = [0,1,2,3,...] b = [6.4,53.8,-5.2,7.1,...]

我必须通过两次检查来运行列表b:

  1. 是b [n]> 50.0
  2. 是b [n]< 0
  3. 如果check1为真,则b [n] = b [n] -50,并且a [n] = a [n] +1 如果check2为真,则b [n] = b [n] +100,并且a [n] = a [n] -1

    我无法弄清楚如何将每个列表中的两个项目绑定在一起,以便列表b [n]中的更改也会触发列表中的更改a [n]

    使用此示例,在通过2个检查运行这些列表之后:

    a = [0,2,1,3,...] b = [6.4,3.8,94.8,7.1,...]

    我只用了几周的时间用python进行编程,而且我完全没有编码的经验。我一直在阅读迭代器,地图,循环等等,但我似乎无法使这个序列的语言正确。

    看起来很容易,但我被困住了!

    感谢,

    乔尔。

2 个答案:

答案 0 :(得分:5)

使用zip从两个列表中生成一对相应的项目并处理每一对。您可以使用生成器理解来获取所有已处理的对,并再次使用zip来获取列表。

def process(a, b):
    if b > 50:
        a += 1
        b -= 50
    elif b < 0:
        a -= 1
        b += 100
    return (a, b)

def process_all(as, bs):
    # Notice the '*' here. 'zip' takes multiple arguments;
    # the '*' forces evaluation of the generator, and expands the resulting
    # sequence into several arguments.
    return zip(*(process(a, b) for (a, b) in zip(as, bs)))

答案 1 :(得分:3)

只是

有什么问题
for i in range(len(a)):
    if b[i] > 50.0:
        b[i] -= 50.0
        a[i] += 1
    elif b[i] < 0.0:
        b[i] += 100.0
        a[i] -= 1