• Python 写 ACM 题目的一些技巧


    输入输出

    input() 输入

    Python3 中 input() 函数接受一个标准输入数据,返回为 string 类型。以换行( )结束。

    input([prompt])
    
    • prompt: 提示信息。

    split() 用于输入

    split() 做输入处理,通过指定分隔符对字符串进行切片,默认为所有的空字符,包括空格、换行( )、制表符( )等。

    str.split(str="", num=string.count(str))
    
    • str:分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。
    • num:分割次数,默认为 (-1) ,即分隔所有。

    逐个数据输入

    x = input().split()  # 输入两个整数
    a = int(x[0])  # 第一个整数
    b = int(x[1])  # 第二个整数
    

    数组输入

    x = input()
    a = []
    for i in x.split():
        a.append(int(i))  # 注意数据类型转换
    

    strip() 输入清理

    Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意只能删除开头和结尾的字符,不能删除中间部分的字符。

    str.strip([chars])
    
    • chars:移除字符串头尾指定的字符序列。注意移除尾部字符序列时为反向,对称删除。

    逐个数据输入

    a = int(input().strip())
    
    print(a)
    

    如果不想换行:

    print(a, end='str')  # 输出不换行,以 str 为分割
    

    sort 排序

    可以用 list 和 truple 实现 C/C++ 中结构体排序的功能。

    lst = [('d', 2), ('a', 4), ('b', 3), ('c', 2)]
    
    # 按照value排序
    lst.sort(key=lambda k: k[1])
    print(lst)
    
    # 按照key排序
    lst.sort(key=lambda k: k[0])
    print(lst)
    
    # 先按value排序再按key排序
    lst.sort(key=lambda k: (k[1], k[0]))
    print(lst)
    
    """输出
    [('d', 2), ('c', 2), ('b', 3), ('a', 4)]
    [('a', 4), ('b', 3), ('c', 2), ('d', 2)]
    [('c', 2), ('d', 2), ('b', 3), ('a', 4)]
    """
    

    更加复杂的需求。首先我们先建立如下 list :

    lst = [{'level': 19, 'star': 36, 'time': 1},
           {'level': 20, 'star': 40, 'time': 2},
           {'level': 20, 'star': 40, 'time': 3},
           {'level': 20, 'star': 40, 'time': 4},
           {'level': 20, 'star': 40, 'time': 5},
           {'level': 18, 'star': 40, 'time': 1}]
    

    排序需求为:level 越大越靠前;level 相同,star 越大越靠前;level 和 star 相同,time 越小越靠前。

    # 注意按照需求反向实现
    # 先按time排序
    lst.sort(key=lambda k: (k.get('time', 0)))
    
    # 再按照level和star顺序
    # reverse=True表示反序排列,默认正序排列
    lst.sort(key=lambda k: (k.get('level', 0), k.get('star', 0)), reverse=True)
    
  • 相关阅读:
    代码整洁之道
    PHP并发IO编程之路
    U盘启动盘的制作--用U盘硬装Windows系统、或是重装Windows系统
    Navicat for MySQL11--使用经验
    Eclipse字体颜色的设置方法
    5.5树和森林
    5.2二叉树
    3.3队列
    3.1栈
    2.3线性表的链式存储结构
  • 原文地址:https://www.cnblogs.com/solvit/p/11647994.html
Copyright © 2020-2023  润新知