在Python中使用迭代器函数连接两个列表

0 投票
2 回答
1183 浏览
提问于 2025-04-16 08:05

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

如果第一个检查通过,那么就把b[n]减去50,同时把a[n]加1;如果第二个检查通过,就把b[n]加100,同时把a[n]减1。

我不知道怎么把这两个列表中的项目联系起来,这样当b[n]发生变化时,a[n]也能相应变化。

用这个例子来说,在经过这两个检查后:

a= [0, 2, 1, 3, ...]

b= [6.4, 3.8, 94.8, 7.1, ...]

我才刚开始学习Python编程,之前完全没有编码经验。我在阅读关于迭代器、映射、for循环等内容,但就是找不到合适的方式来处理这个问题。

看起来很简单,但我卡住了!

谢谢,

乔尔。

相关问题:

2 个回答

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

撰写回答