1.循環里面套用遞歸,當遞歸執行return時,只會退出當前遞歸層
2.不能一邊遍歷list 一邊pop
解決辦法:倒序遍歷解決或者創建新的列表去存儲
3.sqrt求出來的始終是小數形式,注意題目要求的結果有可能是整型
你直接sqrt就提交,那不直接相當于沒做了,填空題很容易丟分。
4.python的遞歸是有深度限制的,默認是1000
你在嘗試遞歸的時候可以試著試驗范圍內的大數,如果報深度超了 就自己設置深度sys.setrecursionlimit()
5.列表的兩種格式
6.set集合在迭代的時候不能一邊遍歷一邊賦值
-解決方法要不就是新加一個變量去代替要不就是將set變為list(set())
7.sys加快輸入(這個很有用,一般對于那些限制短時間完成的,你使用這個前綴一般是比普通的數據讀入快的)
在每次代碼之前加入
import sys
input=sys.stdin.readline
》特殊情況
對于輸入的數字。int() 和 split() 會忽略換行符,所以數字輸入通常不用手動處理。
對于輸入的字符串,sys.stdin.readline 返回的字符串末尾帶換行符(\n),而 input() 會自動去掉。所以需要專門處理
8.二維矩陣賦值
a=[[for _ in range(n)] for _ in range(m)]-----由a=[0 for _ in range(m)]--->[0,0,0,0,0]推廣而來
---[[xx],[xx],[xx]]
a=[[0]*N for i in range(0,N)]
#s=[[0]*N for i in range(0,N)]
# print(a)
for i in range(1,n+1):
rows = [0]
rows.extend(list(map(int,input().split())))
for j in range(1,m+1):
a[i][j]=rows[j]
9.input的各個輸入竅門
input()---int(input())
n,m=map(int,input().split())
list=list(map(int,input().split()))
list[1:n+1]=list(map(int,input().split()))
*
list[1:n+1]
:表示列表list
的第1
個到第n
個位置(不包括第n+1
個位置)
10.list的小技巧(必看)
》list的min,max,sum,count方法
》
》添加元素
方法 | 功能 | 添加方式 | 示例 |
---|---|---|---|
append | 添加單個元素到列表末尾 | 將整個對象作為單個元素添加 | [1, 2, 3].append([4, 5]) → [1, 2, 3, [4, 5]] |
extend | 添加可迭代對象的所有元素到列表末尾 | 將可迭代對象的元素逐個添加 | [1, 2, 3].extend([4, 5]) → |
insert(i, x):在索引 i 插入元素 x。
a = [1, 2, 3] a.insert(1, 5) print(a) # [1, 5, 2, 3]
》刪除元素
remove(x):刪除第一個值為 x的元素,沒找到會拋 ValueError
a = [1, 2, 3, 2] a.remove(2) print(a) # [1, 3, 2]
pop([i]):刪除并返回索引 i的元素,默認最后一個。
a = [1, 2, 3] x = a.pop(1) print(x) # 2 print(a) # [1, 3]
clear():清空列表。
a = [1, 2, 3] a.clear() print(a) # []
》查找元素
index(x[, start[, end]]):返回第一個 x 的索引,沒找到拋 ValueError
a = [1, 2, 3, 2] print(a.index(2)) # 1 print(a.index(2, 2)) # 3(從索引 2 開始找)
count(x):統計 x出現的次數。
a = [1, 2, 2, 3] print(a.count(2)) # 2
》排序和翻轉
sort(key=None, reverse=False):原地排序(前面講過)。
a = [3, 1, 2] a.sort() print(a) # [1, 2, 3]
reverse():反轉列表。
a = [1, 2, 3] a.reverse() print(a) # [3, 2, 1]
》復制
copy():返回列表的淺拷貝。
a = [1, 2, 3] b = a.copy() b[0] = 4 print(a) # [1, 2, 3] print(b) # [4, 2, 3]