如何優雅的使用Python參加程序設計競賽
現在好多程序設計比賽都支持python語言了,之前用的比較多的是Pandas、Numpy、Sklearn、Igraph這些庫,倒是把基礎的操作的忘了。寫了個Python語言的Cheetsheet,如有錯誤,還望指出。
標準輸入輸出
1. 標準輸入
1.1 輸入多個字元串:
str1, str2 = input().split( )
1.2 輸入整數序列:
intlist = list(map(int, input().split( )))
1.3 多組輸入:
while True:
try:
a = input()
except EOFError:
break
1.4 多樣例輸入一組整數,要求輸出整數的平方,每個結果佔一行:
import sys
for line in sys.stdin:
print int(line)**2
2. 標準輸出
2.1 輸出字元串
print("Name:%s"%(Jack))
2.2 輸出整數
print("Age:%d"%(12))
2.3 輸出浮點數
print("Height:%f"%(160.5))
2.4 輸出控制位數(四捨五入)
print("Heihgt:%.2f"%(160.5))
2.5 輸出左端對齊
print("Name:%-8s"%(Jack))
2.6 各個進位
print("十進位:%d,八進位:%o,十六進位%x,二進位%b"%(12,12,12,12))
2.7 輸出指數
print("%e"%9)
2.8 使用0作為佔位符
print("Age:%08d"%(12))
2.9 Print函數不換行
print("fuck",end=)
2.a 要求輸出列表listt中的每一個數字,每個數字間有一個空格,但末尾不能有空格
strr = # 創建一個空字元串
for i in listt:
strr += str(i)+ # 數字後面加了一個空格
print strr[:-1] # 使用切片,去掉了最後一個空格
相對於C/C++更加Pythonic的小技巧
1.1 鏈式比較
1 <= b <= a < 10 #True
1.2 真值判斷
name = Tim
langs = [AS3, Lua, C]
info = {name: Tim, sex: Male, age:23 }
if name and langs and info:
print(All True!) #All True!
1.3 字元串反轉
def reverse_str( s ):
return s[::-1]
1.4 列表連接
strList = ["Python", "is", "good"]
res = .join(strList)
1.5 列表求乘積
from operator import mul
prod = reduce(mul, numList, 1)
1.6 一鍵列表
l = [x*x for x in range(10) if x % 3 == 0]
1.7 字典判斷並添加新內容
dic = {name:Tim, age:23}
dic[workage] = dic.get(workage,0) + 1
#dic = {age: 23, workage: 1, name: Tim}
1.8 for...else檢查是否退出
for x in xrange(1,5):
if x == 5:
print find 5
break
else:
print can not find 5!
1.9 同時得到索引和值
array = [1, 2, 3, 4, 5]
for i, e in enumerate(array,0):
print i, e
1.a 大小寫轉換
a.upper()#全部轉大寫
a.lower()#全部轉小寫
1.b swap
a,b=b,a
1.c 當你真的害怕copy到引用時
import copy
b = copy.deepcopy(a)
列表操作
1. 列表初始化
1.1 帶有重複元素的初始化
listt = [0]*5
1.2 遞增初始化
listt = list(range(10))
#注意 網傳的listt=range(10)在python3是錯誤的寫法
1.3 初始化一個二維數組
multilist = [[0] * 5 for row in range(3)]
#注意 [[0]*5]*3是不對的 自己想為什麼
2. 列表拼接
2.1 拼接運算符
[1, 2, 3] + [4, 5, 6]
2.2 extend
[1,2,3].extend([4,5,6])
3. 列表切片
3.1 帶步長的切片
num2[1:5:2]
#第三個數字代表步長
3.2 反轉切片
num2[::-1]
4. 刪除列表元素
4.1 del
del a[0]
#刪除index為0的元素
4.2 remove
a.remove(a)
#刪除元素為a的元素,若有重複刪除最前面的一個
4.3 pop
a.pop(0)
#刪除index為0元素且返回元素值
5. 列表排序
5.1 升序排序
sorted([5, 2, 3, 1, 4])
5.2 任意順序排序
sorted(a, reverse=True)#降序
sorted(a, reverse=False)#升序
5.3 按某個鍵值排序
sorted(student_objects, key=attrgetter(age))
5.4 按長度排序
a = [i, love, python]
sorted(a, key=len)
5.5 按首字母排序
sorted(a, key= lambda x:x[0])
5.6 二分查找到合適的位置
import bisect
c=[1,2,1,-1,4,5]
c.sort()
bisect.bisect(c, 2)#返回2合適的插入位置
6. 列表常用內置函數
6.1 添加在最後
list.append(obj)
6.2 統計某個元素在列表中出現次數
list.count(obj)
6.3 找出第一個匹配元素的索引
list.index(obj)
字典操作
1. 字典初始化
1.1 普通初始化
dict = {Alice: 2341, Beth: 9102, Cecil: 3258}
1.2 默認初始化
#經典案例
from collections import defaultdict
>>> s = [(yellow, 1), (blue, 2), (yellow, 3), (blue, 4), (red, 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
... d[k].append(v)
...
>>> d.items()
[(blue, [2, 4]), (red, [1]), (yellow, [1, 3])]
1.3 默認字典統計詞頻
>>> s = mississippi
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[(i, 4), (p, 2), (s, 4), (m, 1)]
2. 字典常用函數
2.1 返回(key:value)元組列表
radiansdict.items()
2.2 返回所有鍵
radiansdict.keys()
2.3 返回所有值
radiansdict.value()
2.4 刪除
d.pop(key)
3. 字典小技巧
3.1 通過value查找key
list (student.keys()) [list (student.values()).index (1004)]
#返回的是一個list
3.2 高效率合併兩個dict
dict(dict1, **dict2)
3.3 字典推導式
numbers = [1, 2, 3]
d = {number: number * 2 for number in numbers}
集合操作
1. 集合運算
1.1 交
a & b
1.2 並
a | b
1.3 補
a - b
1.4 不同時在a和b中的
a ^ b
標準庫
1.math
1.1 pai
pai = math.pi
1.2 自然指數
e = math.e
1.3 向上向下取整
math.ceil(x)#向上
math.floor(x)#向下
1.4 絕對值
math.fabs(x)
1.5 冪
math.pow(x,y)
1.6 log
math.log(x,a)
1.7 sin cos tan
2. datetime
2.1 生成日期
a=datetime.date(2017,3,1)
2.2 日期字元輸出
a.strftime("%Y%m%d")
2.3 生成時間
a = datetime.time(12,20,59,899)
2.4 時間字元輸出
a.strftime(%H:%M:%S)
2.5 獲取時間/日期差
(end_time - start_time).seconds
(end_time - start_time).days
2.6 加上時間
d2 = d1 + datetime.timedelta(hours = 8)
3. json
這個板塊一般不會用到,但是也說不定呢?
3.1 json編碼
jsonn = json.dumps(data)
3.2 json解碼
data = json.loads(jsonn)
推薦閱讀: