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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM