第一次嘗試報名藍橋杯的Python組,好好備戰,希望省賽可以拿獎!目前是整理了一些Python的常用函數和常用內置庫,后面可能會開始刷題,如果有比較需要記住的知識點,會再寫一篇刷題篇
一、輸入輸出
1.輸入字符串和浮點數
n = input()
#字符串可以直接遍歷,輸入字符串時遇到需要輸出字符串的題,可以再建一個字符串用來更新,比如這道題
#輸入一個由小寫英文字母組成的字符串,請將其中的元音字母(a, e, i, o, u)轉換成大寫,其它字母仍然保持小寫
n= input()
res=''
for i in n:if i in 'aeiou':res +=i.upper()else:res+=i
print(res)n = float(input())#浮點數
2.一行輸入多個字母或數字
m,n=map(int,input().split())
#輸入一個列表
a=list(map(int,input().split()))
3.轉換時間格式
#12:00:00
h,m,s = map(int,t.split(':'))
#h=12 m=00 s=00
4.輸入一串數字
s = [int(i) for i in input().split()]
5.輸入二維矩陣
for i in range(n):mp.append(list(map(int,input().split())))#矩陣中都是數字for i in range(n):mp.append(list(input()))#矩陣中都是字符
6.輸入例如:
220000
000000
002202時
map=[]
for i in range(N):#N是行數map.append(list(input()))
7.向字符串里添加符號
words=['www','ccc','aaa']
print('\n'.join(words))
#使用 join() 方法合并字符串時,它會將列表(或元組)中多個字符串采用固定的分隔符連接在一起。
#join() 方法也是非常重要的字符串方法,它是 split() 方法的逆方法,用來將列表(或元組)中包含的多個字符串連接成一個字符串。#例如
# 隔空輸出
a = [1,2,3,4]
print(' '.join(map(str,a))) #1 2 3 4
8.保留兩位小數
a = 3.1415926
print("%.2f"%a)
9.字符串轉化為數字
n = input()
int(i) for i in str(n)
10.字符串格式化的三種方法
v1 = "我是{},今年{}".format("李明",22)v2 = "我是%s,今年%d歲“ %(”李明“.22)name = "李明"
age = 22
v3 = f"我是{name},今年{age}歲"%s 字符串 {:s}
%d 整數 {:d}
%.2f 浮點數字(用小數點符號,4舍5入) {:.2f}
%.2e 浮點數字(科學計數法) {:.2e}
11.輸出
for i in range(10):print(i,end='')#打印在一行print(i,end='\n')#換行符結尾
12.切片列表,字符串
a=[起始位置:截止位置:步長]
13.常用內置函數
round(number, digits) # 對數字number四舍五入保留digits位小數,四舍,五不進,六入
enumerate() # 迭代器,返回index和value,可用于循環遍歷或查找
set(x) # 將x轉化為集合,即去重set1 & set2 # 求交集
set1 | set2 # 求并集
set2 - set1 # 求差集
二、關于string類型的一些常用函數
S.lower() # 小寫
S.upper() # 大寫
S.swapcase() #大小寫互換
S.capitalize() # 只有首字母大寫 L love you
S.title# 只要遇到空格都會大寫 L Love You
S.ljust(width,[fillchar]) # 輸出width個字符,S左對齊,不足部分用fillchar填充,默認的為空格。
返回字符串第一次出現的索引,如果沒有匹配項則返回-1,索引從0開始
S.find#針對字符串,會返回-1
S.index()#針對列表,找不到直接報錯
S.find('a', 0,3)#在0-2的索引中找,只返回首次出現的位置
print(s.find('l',1,-1))#指定位置查詢
S.rfind('a',0,3)#從右側開始查找,返回找到的第一個的位置
S.count(substr, start, end) # 計算substr在S中出現的次數
S.replace(oldstr, newstr, count)#把S中的oldstar替換為newstr,count為替換次數
S.strip(chars)#移除s list中指定的chars字符
S.split(sep, maxsplit) # 以sep為分隔符,把S分成一個list。maxsplit表示分割的次數。
S.join(seq)#.join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串
例:a='-'
b='helloword'
print(a.join(b))
>h-e-l-l-o-w-o-r-d
三、關于list的一些常用函數
##二維列表:列表中的元素是列表,本質:一維列表
a=[[1,2,3],[3,4,5]]
list.append(lista)#lista當成一個元素加到前面的列表中
lista+listb #才是拼接
list.extend(str)extend()#接受參數為可迭代的值,會把str加入到list中
list.insert(index,obj)
list.remove(obj)#移除第一個匹配項
list.index(obj)#找出某個值第一個匹配項的下標
list.sort()# 由小到大排序
list.reverse() # 將列表進行翻轉
list.count(obj) # 返回某個元素在列表里面的個數
list.clear()# 清除列表元素
list(seq)#將字符串轉為列表
zip(list1,list2)#用zip封裝列表,在for遍歷
max(a)#求列表a的最大值
min(a)#求列表a的最小值
sum(a)#求列表a的和
四、關于math庫的一些常用函數
1.數學常數
math.e:自然常數 e 的值,約等于 2.71828。
math.pi:圓周率 π 的值,約等于 3.14159。
2.常用數學函數
math.sqrt(x):返回 x 的平方根。
math.pow(x, y):返回 x 的 y 次方。
math.exp(x):返回 e 的 x 次方。
math.log(x, base=math.e):返回 x 的對數。base 參數為對數的底數,默認為自然對數 e。
math.sin(x)、math.cos(x)、math.tan(x):返回 x 的正弦、余弦和正切值。
math.asin(x)、math.acos(x)、math.atan(x):返回 x 的反正弦、反余弦和反正切值。
3.數值運算函數
math.ceil(x):返回不小于 x 的最小整數。
math.floor(x):返回不大于 x 的最大整數。
math.trunc(x):返回 x 的整數部分。
math.modf(x):返回 x 的小數部分和整數部分,以元組形式返回。
math.fabs(x):返回 x 的絕對值。
math.factorial(x):返回 x 的階乘。
math.gcd(a, b):返回 a 和 b 的最大公約數。
a*b//gcd(a,b)#返回a,b的最小公倍數
4.特殊函數
math.erf(x)、math.erfc(x):返回 x 的誤差函數和余誤差函數的值。
math.gamma(x)、math.lgamma(x):返回 x 的伽馬函數和它的自然對數。
math.comb(n, k)#返回不重復且無順序地從 n 項中選擇 k 項的方式總數
五、關于datetime庫的一些函數
1.日期加減
print(datetime.datetime.now() + datetime.timedelta(hours=1))
print(datetime.datetime.now() + datetime.timedelta(days=1))
print(datetime.datetime.now() + datetime.timedelta(weeks=1))
2.修改時間為指定時間
print((datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y-%m-%d 00:00:00"))
六、關于re庫的一些常用函數
re.match(pattern, string[, flags]):從字符串的開頭開始匹配,如果字符串的開頭能夠匹配正則表達式,就返回匹配對象,否則返回None。其中,pattern是正則表達式,string是需要匹配的字符串,flags是可選的匹配標志。
re.search(pattern, string[, flags]):在字符串中搜索正則表達式的第一個匹配結果,如果找到了匹配結果就返回匹配對象,否則返回None。其中,pattern是正則表達式,string是需要匹配的字符串,flags是可選的匹配標志。
re.findall(pattern, string[, flags]) 搜索字符串中所有滿足正則表達式的匹配結果,并以列表形式返回這些匹配結果。其中,pattern是正則表達式,string是需要匹配的字符串,flags是可選的匹配標志。
re.sub(pattern, repl, string[, count, flags]) 用repl替換字符串中所有滿足正則表達式的匹配結果,并返回替換后的字符串。其中,pattern是正則表達式,repl是替換字符串,string是需要匹配的字符串,count是可選的替換次數,默認是0
七、關于queue的一些常用函數
1.創建一個FIFO隊列對象:
q = queue.Queue()
q.put(1)#向隊列中添加元素
q.put(2)
print(q.get()) # 輸出1 get()從隊列中獲取元素
print(q.get()) # 輸出2
q.qsize() # 返回隊列長度
q.empty() # 判斷隊列是否為空
3.雙端隊列
q = deque() # 創建
q.append() # 入隊,從隊尾插入
q.appendleft() # 入隊,從隊頭插入
q.pop() # 出隊,從隊尾刪除,并返回該值
q.popleft() # 出隊,從隊頭刪除,并返回該值
八、關于itertools的一些常用函數
itertools.permutations()
此函數來生成一個序列的全排列。這個函數接受兩個參數,第一個參數是需要排列的序列,第二個參數是排列的長度(可選,默認為序列的長度)。
生成1~3的全排列
for p in permutations:print(p)
1
2
輸出結果:(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
如果想生成指定長度的排列,可以在第二個參數中指定排列的長度,如下所示:
生成1~3的2個元素排列
permutations = itertools.permutations([1, 2, 3], 2)
for p in permutations:print(p)
輸出結果:(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
itertools.count(start=0, step=1)
這個函數返回一個無限迭代器,從 start 開始,以 step 為步長不斷地生成整數。可以使用 itertools.islice() 函數來控制生成的元素個數。
itertools.islice(iterable, start, stop[, step])
iterable:可迭代對象,如列表、元組、字符串等。
start:切片的起始索引。
stop:切片的結束索引,切片生成的元素不包含該索引對應的元素。
step(可選):切片的步長,默認為 1,表示連續的元素。
itertools.cycle(iterable)
這個函數接受一個可迭代對象作為參數,并不斷重復生成該對象中的元素。可以使用 itertools.islice() 函數來控制生成的元素個數。
itertools.repeat(object, times=None)
這個函數返回一個無限迭代器,不斷重復生成指定的對象。如果指定了 times 參數,則迭代指定的次數。
itertools.chain(*iterables)
這個函數接受一些可迭代對象作為參數,返回一個迭代器,依次將它們中的元素連接在一起。
itertools.compress(data, selectors)
這個函數接受兩個可迭代對象作為參數,data 和 selectors。它返回一個迭代器,依次返回 data 中與 selectors 中對應位置為 True 的元素。
itertools.filterfalse(function or None, iterable)
這個函數接受一個函數和一個可迭代對象作為參數,返回一個迭代器,依次返回 iterable 中不滿足函數 function 的元素。
itertools.groupby(iterable, key=None)
這個函數接受一個可迭代對象和一個 key 函數作為參數,返回一個迭代器,將 iterable 中的元素按照 key 函數的結果進行分組。
itertools.product(*iterables, repeat=1)
這個函數接受一些可迭代對象作為參數,返回一個迭代器,依次返回它們中的元素的笛卡爾積。
itertools.permutations(iterable, r=None)
這個函數接受一個可迭代對象和一個整數 r 作為參數,返回一個迭代器,依次返回它們中的元素的 r 元排列。
itertools.combinations(iterable, r)
這個函數接受一個可迭代對象和一個整數 r 作為參數,返回一個迭代器,依次返回它們中的元素的 r 元組合。
九、進制轉換
bin()用來將任意進制整數轉換為二進制數。
oct()用來將任意進制整數轉換為八進制數。
hex()用來將任意進制整數轉換為十六進制數。
int(x, 2) 將x由二進制轉為十進制,其它進制轉十進制類似
十、大小寫轉換
#upper() 方法將字符串中的小寫字母轉為大寫字母。
#lower():所有字母小寫
str.upper()
str.lower()
十一、sort和sorted
list.sort(cmp=None, key=None, reverse=False)
#cmp -- 可選參數, 如果指定了該參數會使用該參數的方法進行排序。
#key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
#reverse -- 排序規則,reverse = True 降序, reverse = False 升序(默認)。
sort 與 sorted 區別:
sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。
list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。
十二、哈希表和字典
enumerate(sequence, [start=0])#同時列出數據下表和數據
d = {key1 : value1, key2 : value2, key3 : value3 }
print(d[key1])# values1
del d[key2] # 刪除鍵key2
d.clear() # 清空字典
del d # 刪除字典
len(dict)#計算字典元素個數,即鍵的總數。
str(dict)#輸出字典,可以打印的字符串表示。
dict.get(key[, value])
print ("key1 : ", d.get(key1))#value1d={1:[1,10,199],3:[2,9,16]}
d.items()
含義:返回字典中的鍵值對列表。
d.items()返回包含鍵值對的元組列表。每個元組中的第一項是鍵,第二項是鍵的值。
list(d.items()) =[(1, [1,10,199]), (3, [2,9,16])]
for o in d.items():ids, ts_ = (i for i in o) # ids是1,3...號, ts_是[1,10,199],[2,9,16]ts_ = sorted(ts_)
print(ids,ts_)#1 [1,10,199] 3 [2,9,16]d.keys()
含義:返回字典中的鍵列表。d.values()
含義:返回字典中的值列表。
十三、分數
#求1+1/2+1/4+1/8+?1/2**19的和
from fractions import Fraction#插入分數模塊
sum = 1
for i in range(1,20):
#輸入分數時,Fraction開頭字母必須大寫,否則會報錯。sum+=Fraction(1,2**i)#表示1/2+......+1/2^19
print(sum)#1048575/524288
十四、求質數
m=[]
for i in range(1,n):if i>1:for j in range(2,i):if i%j==0:breakelse:m.append(i)