我有 2 个输入列表,如下面的小示例,我想对它们进行总结:
小例子:
a = [4, 5, 2]
b = [3, 5, 4]
我想逐项比较这两个列表并基于这些
比较会给每个列表打分。如果两个列表相等
会得到 0 分,并且一个列表中的项目更大,该列表将
获得分数 1。最后结果将是一个列表(名为 RES
)
有 2 件元素。第一项是 a 的所有结果的总和
的第 2 项是 b 的所有结果的总和。
在此示例中,我比较 a 和 b 的第 1 项,由于 4 > 3,a 会
得到分数 1。通过比较其他 2 个项目,两个列表都会得到 0
第 2 项和 b 对于第 3 项将得到 1。通过所有的总和
所有比较的分数,a 会得到 1 (1+0+0)
,b 会得到 1
也是(0+0+1)
。
这是这个小示例的预期输出:
RES = [1, 1]
为了得到这个结果,我用 python 编写了以下代码:
def fun(a, b):
for i in range(len(a)):
if a[i] > b[i]:
AL = 1
elif a[i] == b[i]:
AL = BL = 0
elif a[i] < b[i]:
BL = 1
RES = list(AL, BL)
return RES
但它没有返回我想要的。你知道如何解决吗?
最佳答案
代码中的一些问题
RES = list(AL, BL)
不是定义包含两个元素的列表的方式,您需要使用RES = [AL,BL]
来代替<- 您不会为每次迭代更新
AL
和BL
,而是将其重置为新值 - 您需要在循环之前初始化
AL
和BL
所以更新代码可能如下所示
a = [4, 5, 2]
b = [3, 5, 4]
def fun(a, b):
#Initialize AL and BL
AL = 0
BL = 0
#Increment AL and BL according to the conditions
for i in range(len(a)):
if a[i] > b[i]:
AL += 1
elif a[i] < b[i]:
BL += 1
#Make a list and return it
return [AL, BL]
print(fun(a,b))
作为额外的优化,您可以使用 zip并行迭代两个列表
a = [4, 5, 2]
b = [3, 5, 4]
def fun(a, b):
#Initialize AL and BL
AL = 0
BL = 0
#Increment AL and BL according to the conditions, and iterate on them via zip
for a,b in zip(a,b):
if a > b:
AL += 1
elif a< b:
BL += 1
#Make a list and return it
return [AL, BL]
print(fun(a,b))
两种情况下的输出都是相同的
[1, 1]
关于python - 将 2 个列表汇总到另一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422990/