为了账号安全,请及时绑定邮箱和手机立即绑定

Python 比较两个列表并将值添加到第三个列表

Python 比较两个列表并将值添加到第三个列表

繁星淼淼 2021-05-30 12:48:30
我正在编写一个函数,该函数接受两个只能包含3个元素的列表,将每个元素进行比较,然后将1添加到第三个列表。例子:in :a = [1,2,3]    b = [3,2,1]out: result = [1,1]所以这里的结果是[1,1]因为b[0]>a[0], b[1] = a[1], 和 b [2]<a[2]。我有以下代码:def compareTriplets(a, b):    a = a[:3]    b = b[:3]    result = [0,0]    for i,j in  list(zip(a,b)):        if a[i] > b[j]:            result[0] += 1        elif a[i] < b[j]:            result[1] += 1    return result但这给了我错误“索引超出范围”。我在这里做错了什么?我至少在正确的轨道上吗?我可以通过将输入更改为6个数字来轻松做到这一点,但是将列表作为输入会让我失望。
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您是通过列表的价值循环a和b再试图与索引的值列表。您需要在函数中删除a[i]和j[i],然后使用i和j代替:


def compareTriplets(a, b):

    a = a[:3]

    b = b[:3]

    result = [0,0]

    for i,j in  list(zip(a,b)):

        if i > j:

            result[0] += 1

        elif i < j:

            result[1] += 1

    return result


a = [1,2,3]

b = [3,2,1]


print (compareTriplets(a, b))

# [1, 1]


查看完整回答
反对 回复 2021-06-01
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您正在使用a[i]而不是i(对于b[j])。这是固定代码:


def compareTriplets(a, b):

    a = a[:3]

    b = b[:3]

    result = [0,0]

    for i,j in  list(zip(a,b)):

        if i > j:

            result[0] += 1

        elif i < j:

            result[1] += 1

    return result



a = [1,2,3]

b = [3,2,1]


print(compareTriplets(a,b))  # [1, 1]

这是一个单行样式的解决方案,它很短:


def compareTriplets(a, b):

    return [sum(r) for r in zip(*((i>j, i<j) for i,j in zip(a,b)))]


a = [1,2,3]

b = [3,2,1]


print(compareTriplets(a,b))  # [1, 1]

请注意,它也适用于具有 3 个以上元素的列表。


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号