bytes
bytes型別,不可變位元組序列.
編碼和解碼
encode(encoding=「utf-8」,errors=「strict」)–>bytes
decode(encoding=「utf-8」,errors=「strict」)–>bytes
!!! bytes型別的資料索引出的字元是int型別,如
a = b"abcde"
byte(a[1]) = int = 98
ascii碼表
ascii(american standard code for information interchange)美國資訊交換標準表
類方法 bytes.fromhex(string)例如
bytes.fromhex(65 66 67)=b"abc"
b"abc".hex=「656667」
位元組序網路傳輸用的是大端傳輸。
bytes轉int
int.from_bytes(b"abc",「big」)需要加引數指定是大端模式,小端模式。
int轉bytes
x.to_bytes(len(x),「big or little」)指定模式,大端或小端。
bytearray
類似陣列,方法和陣列一樣.
!!! bytearry型別在替換某個元素時:
bytearry[x] = int型別
bytearry[x:y] = b"符號"
線性結構
性質:可迭代,可用len()獲取長度。通過下標訪問,可索引,鍊錶索引不高效。可以切片。
學過的線性結構:
列表,元組,字串,bytes,bytearry。
返回大寫字母和小寫字母
import string
string.ascii_letters大小寫字母
string.ascii_lower小寫
ascii_upper大寫
切片 !!! 返回新的字串,原來的字串不變.
通過索引區間訪問一段線性結構資料。
sequence[start,stop] 表示返回該區間的子串行
支援負索引 start和stop為0可以省略。超過邊界就取到邊界處。
start一定要在stop左邊
[:]表示從頭到尾,等於copy,相當於淺拷貝。
la = la[:] = [2,3] la = [2,3]
[::-1]表示從尾到頭。相當於反轉
s1=[1,2,3] s1[::-1]=[3,2,1]
[頭:尾:跳的格數]
切片指定尾部的話不包括尾部。
只能從左到右!!!注意是根據索引來判斷左右,而不是根據start stop
例如「www.magedu.com」[-10:10] -10指的是m,10指的是。不包括。所以結果就是「magedu」
切片賦值
前面加型別 list[:]=可迭代物件
集合特點:無序,不重複,可變的,不可索引,可迭代
集合定義:
x= 不能為空,空代表字典
x=set(可迭代物件)
x=裡面的值必須是可雜湊型別
集合的方法:
set.add()如果集合中有該元素,什麼都不做.
set.update(*others) others必須是可迭代物件,合併元素到集合中,會去重.就地修改,返回none.可以同時寫入多個others.
set.remove()刪除元素,如果沒有,返回key鍵錯誤.
set. discard()刪除元素,.如果沒有,不報錯.
set.pop(),沒有索引.隨機彈出.
set.clear()清空集合.
set具有修改,查詢,遍歷,成員運算子(in和not in).
可hash型別:
數值型:int,float,complex
布林值:true false
字串:string,bytes
元組:tuple
空:none
以上都是不可變型別,都可以hash
集合運算:
交集用&
並集用 |
差集 ^
對稱差集,兩個集合的不同部分的集合.
symmetric_difference(other) 求兩個集合的差集.
^等同於symmetric_difference()
symmetric_difference_update(other)獲取和另乙個集合的差集並新增到該集合中.
^=同上
issubset() <= 是不是另乙個集合的子集
set1 < set2 判斷是不是真子集
issuperset()判斷超集
set1 > set2 判斷真超集
isdisjoint()判斷是否和另乙個集合有交集,沒有交集返回true
素數優化
普通求十萬以內的素數方法
# 求10萬以內的素數。
for i in range(3,100):
for j in range(2,i):
if i % 5 == 0 and i % j == 0:
break
print(x)
思考優化方法:
1,素數肯定是奇數,所以偶數可以去掉,
2,乙個素數是否有必要除以每乙個數字呢?
乙個數開平方後是兩個相同的數字,當除到這個開方數字後,被除數增加,結果會減小,會經歷已經算過的數字.所以,算到開方後的數字就可以了.
3,被除數如果是偶數,肯定不能被素數整除,所以也可以排除掉.
4,素數範圍內的合數是不是也可以不用測試呢?但是怎麼實現只除素數呢?,
如果把素數新增到乙個表中,然後除以這個表中的資料是不是就可以了.
**如下:
import datetime # 思考,是否有必要每個數都拿來測試.
count = 2
primenumbers = [3]
start = datetime.datetime.now()
for x in range(5,100000,2):
a = x**0.5
for i in primenumbers:
if i > a :
count += 1
break
if x % i == 0:
break
delt = (datetime.datetime.now()-start).total_seconds()
print(count,delt)
楊輝三角
楊輝三角的普通實現方法:
%%timeit
******** = # 普通方法
for i in range(20):
cur = [1]
if i == 0:
continue
per = ********[i-1]
for j in range(i-1):
# print(********)
思考:
1,該方法空間複雜度較高,能不能只開闢一次空間就得到所有楊輝三角.
利用切片知識就可以實現.
2,發現楊輝三角具有對稱性質,是不是只用算一半就可以得到整個楊輝三角,減少了時間複雜度.
%%timeit
********=[1]*20 ## 開闢一次空間,得到所有楊輝三角.
for i in range(1,21):
for j in range(i-1,1,-1):# 從後向前覆蓋 可以優化,只算到中間值.
********[j-1] = ********[j-1]+********[j-2]
# print(********[:i])
第三週筆記
1什麼是注釋 注釋是用來介紹 的功能 也可以注釋一些 讓它不執行 2編譯好的class檔案注釋是不存在的 注釋只存在源 裡 1單行注釋 後面就是注釋內容 例如 2多行注釋 多行注釋 多行注釋 例如 3文件注釋 可以生成今後使用的功能說明書 1.0有固定書寫位置 類上可以寫 屬性上可以寫 方法可以寫 ...
C 物件導向第三週筆記
類與類的關係 組合 繼承 委託 inheritance 繼承 composition 復合 decegation 委託 composition 表示has a,我體內有另外乙個東西 a擁有b,a所有的功能可以都由b完成,b或許更強大,隨便開放一些功能就可以滿足a的需要。a所佔記憶體的大小是根據b所擁...
新人入職第三週 (周記)
今天521,作為加班狗我還在公司加班,今天算是比較閒的一天吧,今天剛接第二個專案。猶記得上周四晚上,作為我第乙個專案的最後一天,由於自己是在太菜,拖累幾個同事加班到10點半。上班之後才發現,其實上學還是挺好的!上班之前,我可以在宿舍玩手機,玩電腦,手機一天充電能充三回,上班之後,手機每天回家都有一半...