【问题标题】:Function to get pair of numbers in a given list of numbers in python在python中获取给定数字列表中的一对数字的函数
【发布时间】:2019-04-28 13:35:27
【问题描述】:

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

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]

请指教我做错了什么。

【问题讨论】:

    标签: python-3.x function loops sorting


    【解决方案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) 来获取列表的长度。

    【讨论】:

    • 感谢您的回答。但问题需要传递 n,它是列表中的项目数,也作为 testfunc 的参数。所以它必须始终是 testfunc(n,ar)。其中 ar 是数组名称。
    • 你可以很方便的修改上面的函数取n然后什么都不做。
    • :) 是的。知道了。您的方法的代码占用空间更小。感谢分享
    【解决方案2】:

    你在

    中遍历数组长度
    如果 arg[i+1] == arg[j+1]:
    试试这个,它应该适用于这两种情况。
    def testfunc(ar):
        ar.sort();
        count = i = 0
        while i + count < len(ar) - 1:
            if ar[count + i] == ar[count + i + 1]:
                count += 1
            i += 1
        return count
    

    【讨论】:

    • 函数必须有两个参数。 n 是数组中的项目数,ar 是数组本身。输入将有这两个来自用户。
    • 我在 testfunc(9, [2,2,3,3,5,8,5,9,8]) 上尝试了你的脚本。但输出显示为 2。其中输出必须为 4。
    • 我已经通过在函数开头添加 ar.sort() 来编辑您的脚本。现在它完美地工作了。谢谢你的回答。
    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2012-08-21
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多