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

Python比较两个列表并向第三个列表添加值,python,python-3.x,Python,Python 3.x,我正在编写一个函数,它接受两个只能包含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]b[j]: 结果[0]+=1 如果a[i]j: 结果[0]+=1 elif ij: 结果[0]+=1 elif ij,i您可以使用zip成对迭代a和b的元素,根据a的元素还是b的元素更大创建一个2元素列表,然后对结

我正在编写一个函数,它接受两个只能包含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]b[j]:
结果[0]+=1
如果a[i]

但这给了我一个“索引超出范围”的错误。我在这里做错了什么?我至少在正确的轨道上吗?通过将输入更改为6个数字,我可以很容易地做到这一点,但将列表作为输入让我感到厌烦。

您正在循环遍历列表
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]
def比较程序(a、b):
a=a[:3]
b=b[:3]
结果=[0,0]
对于列表中的i,j(zip(a,b)):
如果i>j:
结果[0]+=1
elif i
您使用的是
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比较程序(a、b):
a=a[:3]
b=b[:3]
结果=[0,0]
对于列表中的i,j(zip(a,b)):
如果i>j:
结果[0]+=1
elif i
这是一个单线式的解决方案,非常简短:

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]
def比较程序(a、b):

return[sum(r)for r in zip(*(i>j,i您可以使用
zip
成对迭代
a
b
的元素,根据a的元素还是b的元素更大创建一个2元素列表,然后对结果进行
sum

>>> a = [1,2,3]
>>> b = [3,2,1]
>>> list(map(sum, (zip(*((x>y, y>x) for x,y in zip(a,b))))))
[1, 1]

如果可以将原始列表转换为numpy,那么这是最好的方法

a = np.array([3,2,1])
b = np.array([1,2,3])

c = np.ones(np.not_equal(a, b).sum(), dtype=int)
输出

c = array([ 1, 1])

因此,如果
b[i]>=a[i]
i
j
引用列表中的值,而不是某个计数器。
3
在两个列表中,并且是该大小列表的无效索引。不,它必须严格大于。如果b[i]=a[i]然后,假设
a
是一个3元素列表,行
a=a[:3],就什么也没有发生
是毫无意义的。如果您希望为包含3个以上元素的列表定义函数,函数的名称就没有什么意义。这正是我想要的,我认为这是次要的。谢谢!@DBA108642您也可以使用
reduce
来实现这一点(尽管很难了解您正在做什么)例如:
functools.reduce(lambda x,y:(x[0]+(y[0]>y[1]),x[1]+(y[0]
…@JonClements我的眼睛!
c = array([ 1, 1])