在Python中使用迭代器函数连接两个列表
我有两个列表,每个列表都有128个项目:
a= [0, 1, 2, 3, ...]
b= [6.4, 53.8, -5.2, 7.1, ...]
我需要对列表b进行两个检查:
- b[n]是否大于50.0
- 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)))