【问题标题】:How to compare each element in array and calculate percentage of how many are the same in Python?如何比较数组中的每个元素并计算Python中有多少相同的百分比?
【发布时间】:2019-07-18 16:23:44
【问题描述】:

我有两个数组:

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)

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

【问题讨论】:

  • 因为这引起了两种不同的反应,是时候再举一个更好的例子了。

标签: python arrays function count


【解决方案1】:
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))

【讨论】:

  • 您好,感谢您的回答,但我也想检查元素顺序,如果 a[0]=b[0],我们计算,而不仅仅是 a in b 我们计算
  • 非常感谢!
【解决方案2】:

在其他答案中使用集合。如果您想获得一切都相等的索引,这可能会有所帮助,因为 ccc 仅具有 TrueFalse 条目

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

输出:0.5

【讨论】:

    【解决方案3】:

    首先,您的函数声明缺少缩进。由于您设法得到解包错误,因此可能实际代码格式正确并且您复制错误。至于你的代码,它有很多问题,很难知道从哪里开始:你正在循环两个不同的变量(ij)和两个你应该有一个的范围,你不是t 实际上使用循环中的变量,您仍然在循环的每次迭代中比较整个列表,并且您在循环内返回,这意味着它将在第一次迭代期间终止。

    以下将获得结果列表:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2017-11-12
      • 2021-09-04
      • 1970-01-01
      相关资源
      最近更新 更多