我有两个数组:
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)
如何获得所需的结果?非常感谢
答案 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
仅具有True
或False
个条目
ccc = [el[0] == el[1] for el in zip(aaa, bbb)]
sum(ccc)/len(ccc)
输出:0.5
答案 2 :(得分:0)
首先,您缺少函数声明的缩进。由于您设法解决了拆包错误,因此推测实际的代码格式正确,并且您将其复制错误。至于您的代码,它有很多问题,很难知道从哪里开始:您要遍历两个不同的变量(i
和j
)和两个范围(当您应该有一个范围时) ,您实际上并没有在循环中使用变量,而是在循环的每次迭代中比较整个列表,然后在循环中返回,这意味着它将在第一次迭代中终止。>
以下将获得结果列表:
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()