好文推薦
代碼優化加速:https://mp.weixin.qq.com/s/vsMSjkxWpNnHtdFH7BaEAQ
Python 內置的數據結構如str, tuple, list, set, dict底層都是 C 實現的,速度非常快,自己實現新的數據結構想在性能上達到內置的速度幾乎是不可能的。
- list類似於 C++ 中的std::vector,是一種動態數組。其會預分配一定內存空間,當預分配的內存空間用完,又繼續向其中添加元素時,會申請一塊更大的內存空間,然后將原有的所有元素都復制過去,之后銷毀之前的內存空間,再插入新元素。
刪除元素時操作類似,當已使用內存空間比預分配內存空間的一半還少時,會另外申請一塊小內存,做一次元素復制,之后銷毀原有大內存空間。 - 因此,如果有頻繁的新增、刪除操作,新增、刪除的元素數量又很多時,list的效率不高。此時,應該考慮使用collections.deque。collections.deque是雙端隊列,同時具備棧和隊列的特性,能夠在兩端進行 O(1) 復雜度的插入和刪除操作。
- list的查找操作也非常耗時。當需要在list頻繁查找某些元素,或頻繁有序訪問這些元素時,可以使用bisect維護list對象有序並在其中進行二分查找,提升查找的效率。
另外一個常見需求是查找極小值或極大值,此時可以使用heapq模塊將list轉化為一個堆,使得獲取最小值的時間復雜度是 O(1)。
下面的網頁給出了常用的 Python 數據結構的各項操作的時間復雜度:https://wiki.python.org/moin/TimeComplexity
1、input (轉化為int)
Python3.x 中 input() 函數接受一個標准輸入數據,返回為 string 類型。
# 將輸入的變量,以空格划分
x,y,z = list(map(int, input().split()))
當然除了input()函數還有sys模塊帶有標准輸入
,一般情況下比input()函數快4倍,這里注意下區別,input()把讀到的行用字符串的形式返回,但不會返回行尾的換行符,而sys.stdin.readline()
則會,加上strip()函數效果就一樣了
arr=sys.stdin.readline().strip()
2、split
Python split() 通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字符串。返回分割后的字符串列表。
str.split(str="", num=string.count(str)).
- str -- 分隔符,默認為所有的空字符,包括空格、換行(\n)、制表符(\t)等。
- num -- 分割次數。默認為 -1, 即分隔所有。
3、List
空間申請
IndexError:list assignment index out of range
ERROR code
b = []
for i in range(10):
b[i] = 7
空數組不能直接指定位置,list是一個空的,沒有一個元素,進行list[0]就會出現錯誤!
解決方法1
b.append(1)
解決方法2
生成一個定長的list:
b=[0]*len(data)
b[1]=1
list的插入和刪除
aList = [123, 'xyz', 'zara', 'abc', 'xyz'];
aList.remove('xyz')
alist.insert(index,obj)
obj=alist.pop(index) #defalut index=-1即最后一個元素
4、輸出格式如1 2 3 4
ans=[1,2,3,4]
print(' '.join(map(str,ans)))
map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回
參考
https://blog.csdn.net/u013495762/article/details/82870455
https://www.cnblogs.com/lincappu/p/8179475.html(map函數用法)
https://blog.csdn.net/www_helloworld_com/article/details/82875433