📜  竞争性编码的Python技巧

📅  最后修改于: 2020-05-04 12:00:18             🧑  作者: Mango

Python是一种这样的编程语言,它使一切变得简单而直接。任何精通Python竞争编码的人都会对它的许多功能沉迷。下面列出了一些我发现的很酷的功能,它们在竞争性编码环境中最有用。

  1. Counter Package的most_common函数。
    这可能是我曾经使用过的最有用的函数,并且在编写任何Python代码时始终在脑海中。此函数分析列表/字符串,并根据出现次数降序返回列表/字符串中的前n个实体,其中n是程序员指定的数字。在元组中返回各个实体以及它们的出现次数,这些元组可以根据需要轻松地进行引用/打印。
    # 使用most_common查找前3个元素及其计数的代码
    from collections import Counter
    arr = [1, 3, 4, 1, 2, 1, 1, 3, 4, 3, 5, 1, 2, 5, 3, 4, 5]
    counter = Counter(arr)
    top_three = counter.most_common(3)
    print(top_three)

    输出:

    [(1, 5), (3, 4), (4, 3)]

    输出元组清楚地指出1已发生5次,3已发生4次,4已发生3次。

  2. heapq软件包的n个最大/ n个最小函数。
    此函数有助于返回任何列表中的前n个最小/最大元素,这里n又是程序员指定的数字。
    # Python代码查找列表中3个最大和4个最小的元素.
    import heapq
    grades = [110, 25, 38, 49, 20, 95, 33, 87, 80, 90]
    print(heapq.nlargest(3, grades))
    print(heapq.nsmallest(4, grades))

    输出:

    [110、95、90]
    [20、25、33、38]

    输出的第一行给出列表等级中存在的最大数字中的3个。同样,输出的第二行将打印出列表等级中存在的最小元素中的4个。此函数的另一个特点是它不会忽略重复。因此,如果要放置数组的长度来代替n,我们将得到整个排序后的数组本身!

  3. 字典zipping字典的概念
    Python字典在其提供的独特功能方面着实令人着迷。它们以类似数组的形式存储为键和值对。每个值都可以通过其相应的键进行访问。
    zip函数用于将两个列表连接在一起,或者我们甚至可以将字典中的键和值对作为单个列表连接在一起。在以下代码片段中将清楚说明此概念的应用。
    # 演示zip用法的Python代码.
    import heapq
    stocks = {
        'Goog' : 520.54,
        'FB' : 76.45,
        'yhoo' : 39.28,
        'AMZN' : 306.21,
        'APPL' : 99.76
        }
    zipped_1 = zip(stocks.values(), stocks.keys())
    # 根据值排序
    print(sorted(zipped_1))
    zipped_2 = zip(stocks.keys(), stocks.values())
    print(sorted(zipped_2))
    # 按键排序

    输出:

    [(39.28, 'yhoo'), (76.45, 'FB'), (99.76, 'APPL'), (306.21, 'AMZN'), (520.54, 'Goog')]
    [('AMZN', 306.21), ('APPL', 99.76), ('FB', 76.45), ('Goog', 520.54), ('yhoo', 39.28)]
  4. mapping 函数。
    这个函数是一个偷偷摸摸的小捷径,它使我们能够以非常规的方式在列表上实现一个简单的函数。下面的示例将对次函数进行简单的应用。该函数以函数名称和需要应用函数的列表名称作为参数。
    # 将代码应用于列表的Python代码
    income = [10, 30, 75]
    def double_money(dollars):
        return dollars * 2
    new_income = list(map(double_money, income))
    print(new_income)

    输出:

    [20、60、150]

    在这里,我们只是实现了一个简单的函数,该函数将每个列表值乘以2,然后将其作为新列表返回。