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

我正在编写一个函数,该函数接受两个只能包含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个数字来轻松做到这一点,但是将列表作为输入会让我失望。


繁星淼淼
浏览 218回答 3
3回答

泛舟湖上清波郎朗

您是通过列表的价值循环a和b再试图与索引的值列表。您需要在函数中删除a[i]和j[i],然后使用i和j代替:def compareTriplets(a, b):&nbsp; &nbsp; a = a[:3]&nbsp; &nbsp; b = b[:3]&nbsp; &nbsp; result = [0,0]&nbsp; &nbsp; for i,j in&nbsp; list(zip(a,b)):&nbsp; &nbsp; &nbsp; &nbsp; if i > j:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result[0] += 1&nbsp; &nbsp; &nbsp; &nbsp; elif i < j:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result[1] += 1&nbsp; &nbsp; return resulta = [1,2,3]b = [3,2,1]print (compareTriplets(a, b))# [1, 1]

蓝山帝景

您正在使用a[i]而不是i(对于b[j])。这是固定代码:def compareTriplets(a, b):&nbsp; &nbsp; a = a[:3]&nbsp; &nbsp; b = b[:3]&nbsp; &nbsp; result = [0,0]&nbsp; &nbsp; for i,j in&nbsp; list(zip(a,b)):&nbsp; &nbsp; &nbsp; &nbsp; if i > j:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result[0] += 1&nbsp; &nbsp; &nbsp; &nbsp; elif i < j:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result[1] += 1&nbsp; &nbsp; return resulta = [1,2,3]b = [3,2,1]print(compareTriplets(a,b))&nbsp; # [1, 1]这是一个单行样式的解决方案,它很短:def compareTriplets(a, b):&nbsp; &nbsp; 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))&nbsp; # [1, 1]请注意,它也适用于具有 3 个以上元素的列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python