如何比较数组中的每个元素并计算Python中相同元素的百分比?

时间:2019-07-18 16:23:44

标签: python arrays function count

我有两个数组:

aaa = ['hello','banana','apple','lemon']
bbb = ['fruits','banana','apple','pear']

我想要两个数组中的每个元素(我的意思是我想按顺序比较,例如比较aaa [0]和bbb [0],aaa [1]和bbb [1]) ,返回1并计算总和,否则返回0并计算相同元素的百分比,在此示例中,预期输出为:2/4

我写了这样的函数:

def check(a,b):
if a==b:
    return 1
else:
    return 0

但是'check(aaa,bbb)'的结果为0,因为它比较了整个数组, 然后我尝试了:

def result_check(a,b):
for i,j in range(len(a)), range(len(a)):
    if a==b:
        return 1
    else:
        return 0

但给我一个错误:

ValueError: too many values to unpack (expected 2)

如何获得所需的结果?非常感谢

3 个答案:

答案 0 :(得分:2)

a = ['hello','banana','apple','lemon']
b = ['fruits','banana','apple','pear']
equals = len(set(a) & set(b))  # & is intersection - elements common to both
result = equals/len(a)
print (result)

如果您想使用基本的for循环:

a = ['hello','banana','apple','lemon']
b = ['fruits','banana','apple','pear']

def result_check(x, y):
     count = 0
     for num in y:
             if num in x:
                     count += 1
     return count # function returns how much elements are equal

equals  = result_check(a, b) 
result = equals/len(a)
print (result)

输出:

0.5

编辑:

a = ['hello','banana','apple','lemon']
b = ['fruits','banana','apple','pear']

def result_check(x, y):
     count = 0
     for i in range(len(x)):
         if x[i] == y[i]:
             count += 1
     return count

equals  = result_check(a, b)
result = equals/len(a)
print (result)

或具有列表理解功能:

print (sum([1 for i in range(len(a)) if a[i] == b[i]])/len(a))

答案 1 :(得分:0)

与其他答案一样使用集。如果您想获取所有条件都相等的索引,那么这可能会有所帮助,因为ccc仅具有TrueFalse个条目

ccc = [el[0] == el[1] for el in zip(aaa, bbb)]
sum(ccc)/len(ccc)

输出:0.5

答案 2 :(得分:0)

首先,您缺少函数声明的缩进。由于您设法解决了拆包错误,因此推测实际的代码格式正确,并且您将其复制错误。至于您的代码,它有很多问题,很难知道从哪里开始:您要遍历两个不同的变量(ij)和两个范围(当您应该有一个范围时) ,您实际上并没有在循环中使用变量,而是在循环的每次迭代中比较整个列表,然后在循环中返回,这意味着它将在第一次迭代中终止。

以下将获得结果列表:

def result_check(a,b):
    result_list = [None]*(len(a))
    for i in range(len(a)):
        if a[i]==b[i]:
            result_list[i] = 1
        else:
            result_list[i] = 0
    return result_list

但是你可以做

def result_check(a,b):
    return([a[i] == b[i] for i in range(len(a)))

(这将返回True / False的列表,但是当您求和时,它们将被强制为整数。

使用Pandas软件包,它甚至更简单:

import pandas as pd
a = pd.Series(aaa)
b = pd.Series(bbb)
matching_percentage = (a==b).mean()