0

我有两个列表,都有 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

如果 check1 为真,则 b[n]=b[n]-50,AND a[n]=a[n]+1 如果 check2 为真,则 b[n]=b[n]+100,AND 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 编程,而且我以前完全没有编码经验。我一直在阅读有关迭代器、映射、for 循环等的信息,但我似乎无法为这个序列找到正确的语言。

这似乎很容易,但我被困住了!

谢谢,

乔尔。

4

2 回答 2

4

从两个列表中生成对应项目对,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)))
于 2010-12-06T00:02:05.163 回答
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
于 2010-12-06T00:04:51.070 回答