在python的给定数字列表中获取数字对的函数

时间:2018-11-26 21:04:36

标签: python-3.x function loops sorting

我正在编写一个函数,尝试返回一个整数,该整数表示给定列表中匹配的数字对数。下面是代码。

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]

请告知我在做什么错误。

2 个答案:

答案 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)来获得列表的长度。