我正在编写一个函数,尝试返回一个整数,该整数表示给定列表中匹配的数字对数。下面是代码。
def testfunc(n, ar):
count = []
ar.sort()
print(ar)
if len(ar) == n:
for i in range(len(ar)):
for j in range(i+1, len(ar)):
if ar[i] == ar[j]:
count.append(1)
if ar[i+1] == ar[j+1]:
count.append(1)
break
return len(count)
当输入类似于下面的测试用例1时,它起作用,但是当它是测试用例2时,它失败。
测试案例1:
n = 9
ar = [10, 20, 20, 10, 10, 30, 50, 10, 20]
测试案例2:
n = 10
ar = [1, 1, 3, 1, 2, 1, 3, 3, 3, 3]
请告知我在做什么错误。
答案 0 :(得分:1)
您遍历
if arg[i+1] == arg[j+1]:中的数组长度 试试这个,它在两种情况下都应该起作用。
WebView
答案 1 :(得分:1)
如果您计算列表中每个项目的出现次数,并获得项目到计数的映射,则项目的匹配对数就是该项目的计数除以2并四舍五入。我们可以使用collections.Counter
来对项目进行计数,并使用底数划分//
来获得每个项目的匹配对数。
from collections import Counter
def testfunc(arr):
return sum(v//2 for v in Counter(arr).values())
print(testfunc([10, 20, 20, 10, 10, 30, 50, 10, 20])) # 3
print(testfunc([1, 1, 3, 1, 2, 1, 3, 3, 3, 3])) # 4
print(testfunc([2,2,3,3,5,8,5,9,8])) # 4
不需要传递列表的长度,因为您始终可以通过调用len(arr)
来获得列表的长度。