Python 写 ACM 题目的一些技巧

输入输出

input() 输入

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

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

split() 用于输入

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

str.split(str="", num=string.count(str))
  • str:分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • 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)

posted on 2019-10-10 14:59  solvit  阅读(1651)  评论(0编辑  收藏  举报

导航