變量是保存存儲值的內存位置。也就是說,當創建一個變量時,可以在內存中保留一些空間。
成都創新互聯公司專業為企業提供神池網站建設、神池做網站、神池網站設計、神池網站制作等企業網站建設、網頁設計與制作、神池企業網站模板建站服務,十載神池做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
基于變量的數據類型,解釋器分配內存并決定可以存儲在保留的存儲器中的內容。 因此,通過為變量分配不同的數據類型,可以在這些變量中存儲的數據類型為整數,小數或字符等等。
將值分配給變量
在Python中,變量不需要明確的聲明類型來保留內存空間。當向變量分配值時,Python會自動發出聲明。 等號(=)用于為變量賦值。
=運算符左側的操作數是變量的名稱,而=運算符右側的操作數是將在存儲在變量中的值。 例如 -
#!/usr/bin/python3counter = 100 ? ? ? ? ?# 一個整型數miles ? = 999.99 ? ? ? # 一個浮點數name ? ?= "Maxsu" ? ? ? # 一個字符串site_url ?= "" # 一個字符串print (counter)print (miles)print (name)print (site_url)Python
這里,100,999.99和“Maxsu”分別是分配給counter,miles和name變量的值。執行上面代碼將產生以下結果 -
100
999.99
Maxsu
多重賦值
Python允許同時為多個變量分配單個值。
例如 -
a = b = c = 1Python
這里,創建一個整數對象,其值為1,并且所有三個變量都分配給相同的內存位置。還可以將多個對象分配給多個變量。 例如 -
a, b, c = 10, 20, "maxsu"Python
這里,將兩個值為10和20的整數對象分別分配給變量a和b,并將一個值為“maxsu”的字符串對象分配給變量c。
標準數據類型
存儲在內存中的數據可以是多種類型。 例如,一個人的年齡可存儲為一個數字值,他的地址被存儲為字母數字字符串。 Python具有各種標準數據類型,用于定義可能的操作以及每個標準數據類型的存儲方法。
Python有五種標準數據類型 -
1.數字
2.字符串
3.列表
4.元組
5.字典
1.Python數字
數字數據類型存儲數字值。當為其分配值時,將創建數字對象。 例如 -
var1 = 10var2 = 20Python
可以使用del語句刪除對數字對象的引用。?del語句的語法是 -
del var1[,var2[,var3[....,varN]]]]Python
可以使用del語句刪除單個對象或多個對象。
例如 -
del vardel var_a, var_bPython
Python支持三種不同的數值類型 -
int(有符號整數)
float(浮點實值)
complex(復數)
Python3中的所有整數都表示為長整數。 因此,長整數沒有單獨的數字類型。
例子
以下是一些數字示例 -
int
float
complex
10 ? ?0.0 ? ?3.14j ?
100 ? ?15.20 ? ?45.j ?
-786 ? ?-21.9 ? ?9.322e-36j ?
080 ? ?32.3+e18 ? ?.876j ?
-0490 ? ?-90. ? ?-.6545+0J ?
-0x260 ? ?-32.54e100 ? ?3e+26J ?
0x69 ? ?70.2-E12 ? ?4.53e-7j ?
復數是由x + yj表示的有序對的實數浮點數組成,其中x和y是實數,j是虛數單位。
2.Python字符串
Python中的字符串被標識為在引號中表示的連續字符集。Python允許雙引號或雙引號。 可以使用片段運算符([]和[:])來獲取字符串的子集(子字符串),其索引從字符串開始處的索引0開始,并且以-1表示字符串中的最后一個字符。
加號(+)是字符串連接運算符,星號(*)是重復運算符。例如 -
#!/usr/bin/python3#coding=utf-8# save file: variable_types_str1.pystr = 'yiibai.com'print ('str = ', str) ? ? ? ? ?# Prints complete stringprint ('str[0] = ',str[0]) ? ? ? # Prints first character of the stringprint ('str[2:5] = ',str[2:5]) ? ? # Prints characters starting from 3rd to 5thprint ('str[2:] = ',str[2:]) ? ? ?# Prints string starting from 3rd characterprint ('str[-1] = ',str[-1]) ? ? ?# 最后一個字符,結果為:'!'print ('str * 2 = ',str * 2) ? ? ?# Prints string two timesprint ('str + "TEST" = ',str + "TEST") # Prints concatenated stringPython
將上面代碼保存到?variable_types_str1.py?文件中,執行將產生以下結果 -
F:\worksp\pythonpython variable_types_str1.py
str = ?yiibai.com
str[0] = ?y
str[2:5] = ?iba
str[2:] = ?ibai.com
str[-1] = ?m
str * 2 = ?yiibai.comyiibai.com
str + "TEST" = ?yiibai.comTEST
F:\worksp\pythonShell
2.Python列表
列表是Python復合數據類型中最多功能的。 一個列表包含用逗號分隔并括在方括號([])中的項目。在某種程度上,列表類似于C語言中的數組。它們之間的區別之一是Python列表的所有項可以是不同的數據類型,而C語言中的數組只能是同種類型。
存儲在列表中的值可以使用切片運算符([]和[])來訪問,索引從列表開頭的0開始,并且以-1表示列表中的最后一個項目。 加號(+)是列表連接運算符,星號(*)是重復運算符。例如 -
#!/usr/bin/python3#coding=utf-8# save file: variable_types_str1.pylist = [ 'yes', 'no', 786 , 2.23, 'minsu', 70.2 ]tinylist = [100, 'maxsu']print ('list = ', list) ? ? ? ? ?# Prints complete listprint ('list[0] = ',list[0]) ? ? ? # Prints first element of the listprint ('list[1:3] = ',list[1:3]) ? ? # Prints elements starting from 2nd till 3rd print ('list[2:] = ',list[2:]) ? ? ?# Prints elements starting from 3rd elementprint ('list[-3:-1] = ',list[-3:-1]) ? ?print ('tinylist * 2 = ',tinylist * 2) ?# Prints list two timesprint ('list + tinylist = ', list + tinylist) # Prints concatenated listsPython
將上面代碼保存到?variable_types_str1.py?文件中,執行將產生以下結果 -
F:\worksp\pythonpython variable_types_list.py
list = ?['yes', 'no', 786, 2.23, 'minsu', 70.2]
list[0] = ?yes
list[1:3] = ?['no', 786]
list[2:] = ?[786, 2.23, 'minsu', 70.2]
list[-3:-1] = ?[2.23, 'minsu']
tinylist * 2 = ?[100, 'maxsu', 100, 'maxsu']
list + tinylist = ?['yes', 'no', 786, 2.23, 'minsu', 70.2, 100, 'maxsu']
F:\worksp\pythonShell
3.Python元組
元組是與列表非常類似的另一個序列數據類型。元組是由多個值以逗號分隔。然而,與列表不同,元組被括在小括號內(())。
列表和元組之間的主要區別是 - 列表括在括號([])中,列表中的元素和大小可以更改,而元組括在括號(())中,無法更新。元組可以被認為是只讀列表。 例如 -
#!/usr/bin/python3#coding=utf-8# save file : variable_types_tuple.pytuple = ( 'maxsu', 786 , 2.23, 'yiibai', 70.2 ?)tinytuple = (999.0, 'maxsu')# tuple[1] = 'new item value' 不能這樣賦值print ('tuple = ', tuple) ? ? ? ? ? # Prints complete tupleprint ('tuple[0] = ', tuple[0]) ? ? ? ?# Prints first element of the tupleprint ('tuple[1:3] = ', tuple[1:3]) ? ? ?# Prints elements starting from 2nd till 3rd print ('tuple[-3:-1] = ', tuple[-3:-1]) ? ? ? # 輸出結果是什么?print ('tuple[2:] = ', tuple[2:]) ? ? ? # Prints elements starting from 3rd elementprint ('tinytuple * 2 = ',tinytuple * 2) ? # Prints tuple two timesprint ('tuple + tinytuple = ', tuple + tinytuple) # Prints concatenated tuplePython
將上面代碼保存到?variable_types_tuple.py?文件中,執行將產生以下結果 -
F:\worksp\pythonpython variable_types_tuple.py
tuple = ?('maxsu', 786, 2.23, 'yiibai', 70.2)
tuple[0] = ?maxsu
tuple[1:3] = ?(786, 2.23)
tuple[-3:-1] = ?(2.23, 'yiibai')
tuple[2:] = ?(2.23, 'yiibai', 70.2)
tinytuple * 2 = ?(999.0, 'maxsu', 999.0, 'maxsu')
tuple + tinytuple = ?('maxsu', 786, 2.23, 'yiibai', 70.2, 999.0, 'maxsu')
F:\worksp\pythonShell
以下代碼對于元組無效,因為嘗試更新元組,但是元組是不允許更新的。類似的情況可能與列表 -
#!/usr/bin/python3tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ?)list = [ 'abcd', 786 , 2.23, 'john', 70.2 ?]tuple[2] = 1000 ? ?# 無法更新值,程序出錯list[2] = 1000 ? ? # 有效的更新,合法Python
Python字典
Python的字典是一種哈希表類型。它們像Perl中發現的關聯數組或散列一樣工作,由鍵值對組成。字典鍵幾乎可以是任何Python數據類型,但通常為了方便使用數字或字符串。另一方面,值可以是任意任意的Python對象。
字典由大括號({})括起來,可以使用方括號([])分配和訪問值。例如 -
#!/usr/bin/python3#coding=utf-8# save file : variable_types_dict.pydict = {}dict['one'] = "This is one"dict[2] ? ? = "This is my"tinydict = {'name': 'maxsu', 'code' : 1024, 'dept':'IT Dev'}print ("dict['one'] = ", dict['one']) ? ? ? # Prints value for 'one' keyprint ('dict[2] = ', dict[2]) ? ? ? ? ? # Prints value for 2 keyprint ('tinydict = ', tinydict) ? ? ? ? ?# Prints complete dictionaryprint ('tinydict.keys() = ', tinydict.keys()) ? # Prints all the keysprint ('tinydict.values() = ', tinydict.values()) # Prints all the valuesPython
將上面代碼保存到?variable_types_dict.py?文件中,執行將產生以下結果 -
F:\worksp\pythonpython variable_types_dict.py
dict['one'] = ?This is one
dict[2] = ?This is my
tinydict = ?{'name': 'maxsu', 'code': 1024, 'dept': 'IT Dev'}
tinydict.keys() = ?dict_keys(['name', 'code', 'dept'])
tinydict.values() = ?dict_values(['maxsu', 1024, 'IT Dev'])Shell
字典中的元素沒有順序的概念。但是說這些元素是“亂序”是不正確的; 它們是無序的。
數據類型轉換
有時,可能需要在內置類型之間執行轉換。要在類型之間進行轉換,只需使用類型名稱作為函數即可。
有以下幾種內置函數用于執行從一種數據類型到另一種數據類型的轉換。這些函數返回一個表示轉換值的新對象。它們分別如下所示 -
編號
函數
描述
1 ? ?int(x [,base]) ? ?將x轉換為整數。如果x是字符串,則要base指定基數。 ?
2 ? ?float(x) ? ?將x轉換為浮點數。 ?
3 ? ?complex(real [,imag]) ? ?創建一個復數。 ?
4 ? ?str(x) ? ?將對象x轉換為字符串表示形式。 ?
5 ? ?repr(x) ? ?將對象x轉換為表達式字符串。 ?
6 ? ?eval(str) ? ?評估求值一個字符串并返回一個對象。 ?
7 ? ?tuple(s) ? ?將s轉換為元組。 ?
8 ? ?list(s) ? ?將s轉換為列表。 ?
9 ? ?set(s) ? ?將s轉換為集合。 ?
10 ? ?dict(d) ? ?創建一個字典,d必須是(key,value)元組的序列 ?
11 ? ?frozenset(s) ? ?將s轉換為凍結集 ?
12 ? ?chr(x) ? ?將整數x轉換為字符 ?
13 ? ?unichr(x) ? ?將整數x轉換為Unicode字符。 ?
14 ? ?ord(x) ? ?將單個字符x轉換為其整數值。 ?
15 ? ?hex(x) ? ?將整數x轉換為十六進制字符串。 ?
16 ? ?oct(x) ? ?將整數x轉換為八進制字符串。
哈希(Hash)算法:`hash(object)`
哈希算法將一個不定長的輸入,通過散列函數變換成一個定長的輸出,即散列值。是一種信息摘要算法。對象的hash值比原對象擁有更低的內存復雜度。
它不同于加密。哈希(hash)是將目標文本轉換成具有相同長度的,不可逆的雜湊字符串,而加密則是將文本轉換為具有相同長度的,可逆的密文。
哈希(hash)算法是不可逆的,只能由輸入產生輸出,不能由輸出產生輸入。而加密則是可逆的。即可以從輸入產生輸出,也可以反過來從輸出推出輸入。
對于hash算法,不同的數據應該生成不同的哈希值。如果兩個不同的數據經過Hash函數計算得到的Hash值一樣。就稱為哈希碰撞(collision)。哈希碰撞無法被完全避免。只能降低發生概率。
好的hash函數會導致最少的hash碰撞。
*
可哈希性(hashable):
可哈希的數據類型為不可變的數據結構(如字符串srt,元組tuple,對象集objects等)。這種數據被稱為可哈希性。
不可哈希性:
不可哈希的數據類型,為可變的數據結構(如字典dict,列表list和集合set等)。
如果對可變的對象進行哈希處理,則每次對象更新時,都需要更新哈希表。這樣我們則需要將對象移至不同的數據集,這種操作會使花費過大。
因此設定不能對可變的對象進行hash處理。
**
**
Python3.x添加了hash算法的隨機性,以提高安全性,因此對于每個新的python調用,同樣的數據源生成的結果都將不同。
哈希方法有(MD5, SHA1, SHA256與SHA512等)。常用的有SH256與SHA512。MD5與SHA1不再常用。
- MDH5 (不常用)
- SHA1 (不常用)
- SHA256 (常用)
- SHA512 (常用)
一種局部敏感的hash算法,它產生的簽名在一定程度上可以表征原內容的相似度。
可以被用來比較文本的相似度。
安裝simhash:
Pip3 install simhash
感知哈希算法(perceptual Hash Algorithm)。用于檢測圖像和視頻的差異。
安裝Imagehash:
pip3 install Imagehash
比較下面兩張圖片的Imagehash值
可以看到兩張圖片的hash值非常相似。相似的圖片可以生成相似的哈希值是Imagehash的特點。
Python中字符串是可哈希的,即可以作為字典的鍵或者HashTable的鍵使用。
您可以這樣子使用Python內置函數hash(散列函數):
您也可以將字符串轉為一個集合:
總之,Python里面有很多內置的hash功能性數據結構和函數。
哈希表(Hash Table) :通過鍵 key 和一個映射函數 Hash(key) 計算出對應的值 value,把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。
哈希函數(Hash Function) :將哈希表中元素的關鍵鍵值映射為元素存儲位置的函數。
哈希沖突(Hash Collision) :不同的關鍵字通過同一個哈希函數可能得到同一哈希地址。
哈希表的兩個核心問題是: 「哈希函數的構建」 和 「哈希沖突的解決方法」 。
常用的哈希函數方法有:直接定址法、除留余數法、平方取中法、基數轉換法、數字分析法、折疊法、隨機數法、乘積法、點積法等。
常用的哈希沖突的解決方法有兩種:開放地址法和鏈地址法。
給你一個整數數組 nums 和兩個整數 k 和 t 。請你判斷是否存在 兩個不同下標 i 和 j,使得 abs(nums[i] - nums[j]) = t ,同時又滿足 abs(i - j) = k 。
如果存在則返回 true,不存在返回 false。
給定兩個數組 nums1 和 nums2 ,返回 它們的交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。
給你兩個整數數組 nums1 和 nums2 ,請你以數組形式返回兩數組的交集。返回結果中每個元素出現的次數,應與元素在兩個數組中都出現的次數一致(如果出現次數不一致,則考慮取較小值)。可以不考慮輸出結果的順序。
請你判斷一個 9 x 9 的數獨是否有效。只需要 根據以下規則 ,驗證已經填入的數字是否有效即可。
數字 1-9 在每一行只能出現一次。
數字 1-9 在每一列只能出現一次。
數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。(請參考示例圖)
力扣217
力扣389
力扣496
內容參考: