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

2024-05-14 00:14:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数组:

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)

我怎样才能得到我需要的结果?非常感谢


Tags: 元素applehellolenreturnifdefcheck
3条回答
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))

首先,函数声明缺少缩进。由于您成功地获得了解包错误,因此可能实际代码的格式正确,而您复制的代码错误。至于你的代码,它有很多错误,很难知道从哪里开始:你在两个不同的变量(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的列表,但是当您取和时,它们将强制为整数。你知道吗

熊猫套餐更简单:

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

在另一个答案中使用集合。如果您想得到所有内容都相等的索引,这可能会有所帮助,因为ccc只有TrueFalse个条目

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

输出:0.5

相关问题 更多 >