網站首頁 編程語言 正文
python a = [0]*x格式的含義
a為一個含有x個字符串的列表
例如:
import sys
a = "12352523452334"
num = len(a)
k = int(num/3)
print(k)
sub = [0]*k
for i in range(k):
? ? sub[i] = a[i*3:i*3+3]
? ? isString = isinstance(sub,list)
? ? print(isString)
? ? print(sub[i])
print(len(sub))
4
True
123
True
525
True
234
True
523
4
python使用技巧與爬過的坑
1 dict的使用
python中的字典應該是許多朋友常用的一種數據結構,其數據結構如下:
{key: value}
這里主要列幾個字典使用的技巧。
1.1 dict的刪改查
其實對于dict的刪改查都需要用到查詢,比如改,就是先查詢到某個鍵值對,然后再做更改操作。
可能許多初學者對于字典的訪問是如下幾種方式:
for k, v in d.items():
?? ?balabala
for v in d.values():
?? ?balabala
其實這是一種特別浪費性能的操作方式,因為python中的dict是通過Hash方式來查詢鍵的。簡單來說就是查詢鍵的時間復雜度是O ( 1 ) O(1)O(1),而查詢值的時間復雜度是O ( n ) O(n)O(n)。放在代碼里面來說,就是:
for k in d.keys():
這種查詢方式是O ( 1 ) O(1)O(1)的時間復雜度,而:
for k, v in d.items():
或者:
for v in d.values():
是O ( n ) O(n)O(n)的時間復雜度。
所以為了節省查詢時間,我們如果要對值進行操作,都是如下:
for k in d.keys():
?? ?val = d[k]
而python三大數據結構:列表、元組、字典,就只有字典的鍵的查詢是O ( 1 ) O(1)O(1)的時間復雜度,其余的都是O ( n ) O(n)O(n)的時間復雜度。
1.2 dict的鍵
既然上面已經說到了dict的鍵是hash查詢的,所以dict的鍵有嚴格的要求,就是hashable的數據才能作為dict的鍵。
那么何為hashable?簡單來說,就是在運行過程中不可修改的。
就比如列表就是可以修改的,因為列表可以隨時進行append等操作,字典也是可以修改的,比如隨時可以進行pop等操作。
那么什么是hashable的呢?常用的字符串、數字這些都可以,還有一個數據結構是hashable的,就是元組,因為元組是無法被修改的。所以當你想要存儲一組數據作為鍵值的時候,可以考慮將這組數據轉換成元組,畢竟list和dict是可以相互切換的嘛。
2 numpy
2.1 array
這是我最近編碼過程中遇到的一個坑,就是array的賦值操作。我們通常的賦值操作就是:
a = b
但是對于numpy的ndarray對象,這種賦值不僅會將值賦過去,還會把內存地址賦值過去,比如如下代碼:
import numpy as np
a = np.array([1, 2, 3])
print("id(a):", id(a))
b = a
print("id(b):", id(b))
print(id(a) == id(b))
輸出結果如下:
id(a): 2721844244768
id(b): 2721844244768
True
也就是說,如果你只是使用a = b這種操作,那么你在對b進行操作的時候也會更改a,但是如果在某個使用場景,你需要對b進行操作,但是不改變a,那么要用如下的代碼(b = a.copy()):
import numpy as np
a = np.array([1, 2, 3])
print("id(a):", id(a))
b = a.copy()
print("id(b):", id(b))
print(id(a) == id(b))
輸出結果:
id(a): 1549742256336
id(b): 1549742141968
False
3 文件操作
3.1 pickle
pickle是大家常用的一個文件,最大的優點在于什么東西存儲進去,就可以讀取什么東西出來。
pickle是以二進制方式進行存儲與讀取的,比如下面的栗子:
import pickle
with open(filepath_1, 'rb') as f:
?? ?file = pickle.load(f)
with open(filepath_2, 'wb') as f:
?? ?pickle.dump(file, f)
但是可能有許多初學者會在寫入pickle的時候選擇追加方式寫入(比如爬蟲中斷等情況),但是這種方式是不可行的。因為pickle是二進制操作,如果以追加方式寫入,那么你在讀取的時候只能讀取到第一次寫入的內容,之后的內容是無法讀取的。
那么在這種有可能因為中斷等原因需要一直添加內容到pkl里面,我比較推薦分成不同份的文件進行保存,既可以保證文件能夠正常的讀取,也不用擔心因為程序中斷而導致需要重新執行的問題。
原文鏈接:https://blog.csdn.net/qq_40549751/article/details/80727884
相關推薦
- 2022-05-11 多線程編程(下):線程同步&通信
- 2022-10-27 Kotlin?Flow封裝類SharedFlow?StateFlow?LiveData使用對比_An
- 2022-07-26 msSQL中having的用處詳解_MsSql
- 2022-11-17 Android?Compose?屬性動畫使用探索詳解_Android
- 2022-04-02 Python字符串與正則表達式詳細介紹_python
- 2022-07-16 淺談常見的加密算法
- 2022-05-25 Entity?Framework?Core對Web項目生成數據庫表_實用技巧
- 2022-08-26 詳解WPF雙滑塊控件的使用和強制捕獲鼠標事件焦點_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支