Python 四大數據類型總結

2020-12-15 高教幫

基本數據類型

數值型

Python 中的數據皆是對象,比如被熟知的 int 整型對象、float 雙精度浮點型、bool 邏輯對象,它們都是單個元素。舉兩個例子。

前綴加 0x,創建一個十六進位的整數:

0xa5# 等於十進位的 165使用 e 創建科學計數法表示的浮點數:

1.05e3# 1050.0容器型

可容納多個元素的容器對象,常用的比如:list 列表對象、 tuple 元組對象、dict 字典對象、set 集合對象。Python 定義這些類型的變量,語法非常簡潔。

舉例如下。

使用一對中括號 [],創建一個 list 型變量:

lst = [1,3,5] # list 變量示意圖看出,右側容器為開環的,意味著可以向容器中增加和刪除元素:

使用一對括號 (),創建一個 tuple 型對象:

tup = (1,3,5) # tuple 變量示意圖看出,右側容器為閉合的,意味著一旦創建元組後,便不能再向容器中增刪元素:

但需要注意,含單個元素的元組後面必須保留一個逗號,才被解釋為元組。

tup = (1,) # 必須保留逗號否則會被認為元素本身:

In [14]: tup=(1) ...: print(type(tup)) <class 'int'>使用一對花括號 {} 另使用冒號 :,創建一個 dict 對象:

dic = {'a':1, 'b':3, 'c':5} # dict變量字典是一個哈希表,下面的示意圖形象的表達出字典的 「形」。

僅使用一對花括號 {},創建一個 set 對象:

s = {1,3,5} # 集合變量Python 的容器類型,list、dict、tuple、set 等能方便地實現強大的功能,下面給出幾個案例。

1. 去最求平均

去掉列表中的一個最小值和一個最大值後,計算剩餘元素的平均值。

defscore_mean(lst): lst.sort() lst2=lst[1:-1]return round((sum(lst2)/len(lst2)),1)lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8]score_mean(lst) # 9.1代碼執行過程,動畫演示:

2. 列印 99 乘法表

列印出如下格式的乘法表:

1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81一共有 10 行,第 i 行的第 j 列等於:j*i,其中:

i 取值範圍:1<=i<=9j 取值範圍:1<=j<=i根據「例子分析」的語言描述,轉化為如下代碼:

In [13]: for i in range(1,10): ...: for j in range(1,i+1): ...: print('%d*%d=%d'%(j,i,j*i),end='\t') ...: print()3. 樣本抽樣

使用 sample 抽樣,如下例子從 100 個樣本中隨機抽樣 10 個。

from random import randint,samplelst = [randint(0,50) for _ in range(100)]print(lst[:5])# [38, 19, 11, 3, 6]lst_sample = sample(lst,10)print(lst_sample) # [33, 40, 35, 49, 24, 15, 48, 29, 37, 24]字符串

注意 Python 中沒有像 C++ 表示的字符類型(char),所有的字符或串都被統一為 str 對象。如單個字符 c 的類型也為 str。

str 類型會被經常使用,先列舉 5 個被高頻使用的方法。

strip 用於去除字符串前後的空格:

In [1]: ' I love python\t\n '.strip()Out[1]: 'I love python'replace 用於字符串的替換:

In [2]: 'i love python'.replace(' ','_')Out[2]: 'i_love_python'join 用於合併字符串:

In [3]: '_'.join(['book', 'store','count'])Out[3]: 'book_store_count'title 用於單詞的首字符大寫:

In [4]: 'i love python'.title()Out[4]: 'I Love Python'find 用於返回匹配字符串的起始位置索引:

In [5]: 'i love python'.find('python')Out[5]: 7舉個應用字符串的案例,判斷 str1 是否由 str2 旋轉而來。

字符串 stringbook 旋轉後得到 bookstring,寫一段代碼驗證 str1 是否為 str2 旋轉得到。

轉化為判斷:str1 是否為 str2+str2 的子串。

下面函數原型中,註明了每個參數的類型、返回值的類型,增強代碼的可讀性和可維護性。

defis_rotation(s1: str, s2: str) -> bool:if s1 isNoneor s2 isNone:returnFalseif len(s1) != len(s2):returnFalsedefis_substring(s1: str, s2: str) -> bool:return s1 in s2return is_substring(s1, s2 + s2)測試函數 is_rotation:

r = is_rotation('stringbook', 'bookstring')print(r) # Truer = is_rotation('greatman', 'maneatgr')print(r) # False代碼執行過程,動畫演示:

字符串的匹配操作除了使用 str 封裝的方法外,Python 的 re 正則模塊功能更加強大,寫法更為簡便,廣泛適用於爬蟲、數據分析等。

下面這個案例實現:密碼安全檢查,使用正則表達式非常容易實現。

密碼安全要求:

要求密碼為 6 到 20 位;密碼只包含英文字母和數字。import repat = re.compile(r'\w{6,20}') # 這是錯誤的,因為 \w 通配符匹配的是字母,數字和下劃線,題目要求不能含有下劃線# 使用最穩的方法:\da-zA-Z 滿足「密碼只包含英文字母和數字」# \d匹配數字 0-9# a-z 匹配所有小寫字符;A-Z 匹配所有大寫字符pat = re.compile(r'[\da-zA-Z]{6,20}')選用最保險的 fullmatch 方法,查看是否整個字符串都匹配。

以下測試例子都返回 None,原因都在解釋裡。

pat.fullmatch('qaz12') # 返回 None,長度小於 6pat.fullmatch('qaz12wsxedcrfvtgb67890942234343434') # None 長度大於 22pat.fullmatch('qaz_231') # None 含有下劃線下面這個字符串 n0passw0Rd 完全符合:

In [20]: pat.fullmatch('n0passw0Rd')Out[20]: <re.Match object; span=(0, 10), match='n0passw0Rd'>自定義類型

Python 使用關鍵字 class 定製自己的類,self 表示類實例對象本身。

一個自定義類內包括屬性、方法,其中有些方法是自帶的。

類(對象):

classDog(object):pass以上定義一個 Dog 對象,它繼承於根類 object,pass 表示沒有自定義任何屬性和方法。

下面創建一個 Dog 類型的實例:

wangwang = Dog()Dog 類現在沒有定義任何方法,但是剛才說了,它會有自帶的方法,使用 __dir__() 查看這些自帶方法:

In [26]: wangwang.__dir__()Out[26]:['__module__','__dict__','__weakref__','__doc__','__repr__','__hash__','__str__','__getattribute__','__setattr__','__delattr__','__lt__','__le__','__eq__','__ne__','__gt__','__ge__','__init__','__new__','__reduce_ex__','__reduce__','__subclasshook__','__init_subclass__','__format__','__sizeof__','__dir__','__class__']有些地方稱以上方法為魔法方法,它們與創建類時自定義個性化行為有關。比如:

__init__ 方法能定義一個帶參數的類;__new__ 方法自定義實例化類的行為;__getattribute__ 方法自定義讀取屬性的行為;__setattr__ 自定義賦值與修改屬性時的行為。類的屬性:

def__init__(self, name, dtype): self.name = name self.dtype = dtype通過 __init__,定義 Dog 對象的兩個屬性:name、dtype。

類的實例:

wangwang = Dog('wangwang','cute_type')wangwang 是 Dog 類的實例。

類的方法:

defshout(self): print('I\'m %s, type: %s' % (self.name, self.dtype))注意:

自定義方法的第一個參數必須是 self,它指向實例本身,如 Dog 類型的實例 dog;引用屬性時,必須前面添加 self,比如 self.name 等。總結以上代碼:

In [40]: classDog(object): ...: def__init__(self,name,dtype): ...: self.name=name ...: self.dtype=dtype ...: defshout(self): ...: print('I\'m %s, type: %s' % (self.name, self.dtype))In [41]: wangwang = Dog('wangwang','cute_type')In [42]: wangwang.nameOut[42]: 'wangwang'In [43]: wangwang.dtypeOut[43]: 'cute_type'In [44]: wangwang.shout()I'm wangwang, type: cute_type看到創建的兩個屬性和一個方法都被暴露在外面,可被 wangwang 調用。這樣的話,這些屬性就會被任意修改:

In [49]: wangwang.name='wrong_name'In [50]: wangwang.nameOut[50]: 'wrong_name'如果想避免屬性 name 被修改,可以將它變為私有變量。改動方法:屬性前加 2 個 _ 後,變為私有屬性。如:

In [51]: classDog(object): ...: def__init__(self,name,dtype): ...: self.__name=name ...: self.__dtype=dtype ...: defshout(self): ...: print('I\'m %s, type: %s' % (self.name, self.dtype))同理,方法前加 2 個 _ 後,方法變為「私有方法」,只能在 Dog 類內被共享使用。

但是這樣改動後,屬性 name 不能被訪問了,也就無法得知 wangwang 的名字叫啥。不過,這個問題有一種簡單的解決方法,直接新定義一個方法就行:

defget_name(self):return self.__name綜合代碼:

In [52]: classDog(object): ...: def__init__(self,name,dtype): ...: self.__name=name ...: self.__dtype=dtype ...: defshout(self): ...: print('I\'m %s, type: %s' % (self.name, self.dtype)) ...: defget_name(self): ...: return self.__name ...:In [53]: wangwang = Dog('wangwang','cute_type')In [54]: wangwang.get_name()Out[54]: 'wangwang'但是,通過此機制,改變屬性的可讀性或可寫性,怎麼看都不太優雅!因為無形中增加一些冗餘的方法,如 get_name。

下面,通過另一個例子,解釋如何更優雅地改變某個屬性為只讀或只寫。

自定義一個最精簡的 Book 類,它繼承於系統的根類 object:

classBook(object):def__init__(self,name,sale): self.__name = name self.__sale = sale使用 Python 自帶的 property 類,就會優雅地將 name 變為只讀的。

@propertydefname(self):return self.__name使用 @property 裝飾後 name 變為屬性,意味著 .name 就會返回這本書的名字,而不是通過 .name() 這種函數調用的方法。這樣變為真正的屬性後,可讀性更好。

In [101]: classBook(object): ...: def__init__(self,name,sale): ...: self.__name = name ...: self.__sale = sale ...: @property ...: defname(self): ...: return self.__nameIn [102]: a_book = Book('magic_book',100000)In [103]: a_book.nameOut[103]: 'magic_book'property 是 Python 自帶的類,前三個參數都是函數類型。更加詳細的討論放在後面討論裝飾器時再展開。

In [104]: help(property)Help on classpropertyinmodulebuiltins:classproperty(object) | property(fget=None, fset=None, fdel=None, doc=None)如果使 name 既可讀又可寫,就再增加一個裝飾器 @name.setter。

In [105]: classBook(object): ...: def__init__(self,name,sale): ...: self.__name = name ...: self.__sale = sale ...: @property ...: defname(self): ...: return self.__name ...: @name.setter ...: defname(self,new_name): ...: self.__name = new_nameIn [106]: a_book = Book('magic_book',100000)In [107]: a_book.name = 'magic_book_2.0'In [108]: a_book.nameOut[108]: 'magic_book_2.0'注意這種裝飾器寫法:name.setter,name 已經被包裝為 property 實例,調用實例上的 setter 函數再包裝 name 後就會可寫。對於 Python 入門者,可以暫時不用太糾結這部分理論,使用 Python 一段時間後,再回過頭來自然就會理解。

小結

今天學習 Python 的四大基本數據類型。數值型 int、float 等;容器型 list、dict、tuple、set 等;字符型 str 與正則表達式介紹;自定義類的基本語法規則,class、屬性和方法等。

來源:網際網路摘抄

相關焦點

  • Python基本數據類型
    整數類型4種進位表示形式十進位:1010,99,-217二進位:以0b或0B開頭:0b101,-0B101八進位:以0o或0O開頭:0o123,-0O456十六進位:以0x或0X開頭:0x9a,-0X89浮點類型浮點數之間的運算存在不確定尾數 !
  • Python數據類型之字符串
    # 字符串是python中最常用的數據類型,我們可以使用引號來創建字符串,引號可以是單引號,雙引號或三引號,本質上單引號和雙引號以及三引號的作用是一樣的 # 字符串是一種不可變的序列類型,單個字符從左到右按照順序排列,同時修改某個位置的字符是不被允許的 #
  • 「python學習手冊-筆記」003.數值類型
    003.數值類型本系列文章是我個人學習《python學習手冊(第五版)》的學習筆記,其中大部分內容為該書的總結和個人理解,小部分內容為相關知識點的擴展。非商業用途轉載請註明作者和出處;商業用途請聯繫本人(gaoyang1019@hotmail.com)獲取許可。
  • 四種高性能數據類型,Python collections助你優化代碼、簡潔任務
    選自gitconnected作者:George Seif機器之心編譯參與:王子嘉、杜偉在這篇文章中,機器學習工程師 George Seif 介紹了 Python collections 模塊最受歡迎的四種數據類型以及它們各自的使用方法。這些數據類型可以對代碼進行優化,進而實現更簡潔的任務執行。
  • python 系列(枚舉類型)
    枚舉 - 枚舉類型該enum模塊定義了具有迭代和比較功能的枚舉類型。它可用於為值創建定義明確的符號,而不是使用文字整數或字符串。創建枚舉class通過子類化Enum和添加描述值的類屬性,使用語法 定義新的枚舉。
  • 慢步學習二級python,字符串類型的操作:操作符,函數和方法
    繼續學習二級python考試的大綱內容:4.字符串類型的操作:字符串操作符,處理函數和處理方法字符串和數值是python語言的基礎數據類型。學習字符串類型數據的操作是學習python的基礎。逗號作為分隔符,第一個指令產生的是一個元組類型數據(以後再考慮,這裡不細究),該元組包含兩個字符串「我」和「愛你」在第2個指令中,把逗號變成空格,這裡的空格和+一樣,把「我」、「愛」、「你」三個單獨的字符串連接在一起了。後面的*,跟乘法類似,*2,就是對應字符串重複2次。「love」字符串重複2次,再由+與前面「我愛你」連接。
  • java大數據和python大數據的全面對比,哪個更主流?
    大數據是目前網際網路流行的技術語言,處理大數據的程式語言比較有優勢的也很多,比如java、python、go、R語言、Hadoop等等,按道理來說每種程式語言都可以處理大數據,只是處理的規模不一樣而且,但是現在比較受歡迎的數據處理程式語言是java與python。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • python入門第二課:變量和數據類型
    本教程使用的課本是《Python編程:從入門到實踐》,作者:[美] Eric Matthes在Python中,變量可以理解為抽屜,數據就是一個蘋果、香蕉、書本等可以放進抽屜的東西,變量是用來存儲數據的。我們對上一節課的hello world代碼稍加改動,改成下面的代碼,看看會輸出什麼?
  • 慢步學python,編程基礎,字符串類型例子及輸出
    想了解python的安裝及運行的可以看慢步之前寫的文章。今天繼續python編程基礎內容,字符串類型數據。python裡面主要的數據類型是數值類型和字符串類型。計算機可以進行運算的是數值,字符串不能進行數學運算,像你在閱讀的文字,可以理解為字符串的一種。
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。這是網上的一張關於圖表類型選擇的總結。
  • 乾貨| 完美Python入門基礎知識點總結
    Python有五個標準的數據類型Numbers(數字)String(字符串)List(列表)Tuple(元組)Dictionary(字典)Python支持四種不同的數字類型int(有符號整型)long(長整型[也可以代表八進位和十六進位])float(浮點型)complex(複數)
  • 重磅:包郵寄送《Python數據可視化之美》
    人生苦短,我用python!現在python語言越來越流行,尤其是在機器視覺、機器學習與深度學習等領域。但是數據可視化一直是其短板,特別相比較R語言而言。《python數據可視化之美》主要介紹如何使用python中的matplotlib、seaborn、plotnine、basemap等包繪製專業圖表。本書先介紹了python語言編程基礎知識,以及使用numpy和pandas兩個包的數據操作方法;再對比了matplotlib、seaborn和plotnine三個包的圖形語法。
  • SDN軟體定義網絡之python應用開發學習總結
    opendaylight-inventory rev...展開Config---nodes---table---flow依次展開然後下面有個看不到的按鈕-->>add list item填寫Instruction欄位,用於執行匹配成功之後的動作:Instruction 選擇 apply-actions-case在instruction中添加action動作,類型
  • python入門教程06-01(python語法入門之字符編碼)
    一 引入字符串類型、文本文件的內容都是由字符組成的,但凡涉及到字符的存取,都需要考慮字符編碼的問題。#2、任何軟體的啟動都是將數據從硬碟中讀入內存,然後cpu從內存中取出指令並執行#3、軟體運行過程中產生的數據最先都是存放於內存中的,若想永久保存軟體產生的數據,則需要將數據由內存寫入硬碟2.2 文本編輯器讀取文件內容的流程#階段1、啟動一個文件編輯器(文本編輯器如nodepad++,pycharm,word)#階段2、
  • Java數據類型的「誰都看得懂」總結
    Java數據類型總結(用你敏銳的洞察力猜猜上圖可以組成什麼詞?)Java語言是一種強類型語言,所謂強類型語言就是所有變量的使用都必須嚴格符合規定,所有變量都必須先定義後使用。而Java的數據類型分為兩大類,分別是基本類型和引用類型,引用類型主要有類、接口和數組等等,那麼這裡主要總結的的是基本類型,基本數據類型呢,又可以分為數值類型和布爾類型(即Boolean類型),布爾類型比較簡單,它只有兩個值(true和false)。數值類型又可以再往下劃分,分別分為整數類型、浮點數類型以及字符類型。
  • 不知道數據如何進行拆分?python數據拆分3步法,靈活易用
    python的三方庫pandas有一些能根據指定面元或樣本分位數將數據拆分成多塊的工具(比如cut或qcut)。將這些函數跟groupby結合起來,就能非常輕鬆地實現對數據集的桶(bucket)或分位數(quantile)分析了。
  • Python中的變量與字符串數據類型
    CDA數據分析師 出品大家好,我是一行,作為當下最受歡迎和市場使用的程式語言之一,Python在廣大職場人士的日常事務中佔據越來越重要的位置。今天我們就對Python中變量以及字符串數據類型做一個總結,一起從零開始學習Python。
  • 都是10G的大數據計算,Python與PHP誰算的速度更快?正面PK硬剛
    我們先準備一個簡單的數據文件:vi data.txt把下列內容粘貼進去:Hello world , Hello python !執行10G數據計算1、所有的伺服器上都安裝好Python;2、保證mapper.py和reducer.py同步到各伺服器上了;3、為了對比PHP的計算效率,數據文件咱們還是使用PHP用的那個10G的文件。
  • Python實戰 | 只需 「4步」 入門網絡爬蟲
    在 python數據分析中,我們可以使用使用第三步保存的數據直接分析,主要使用的庫如下:NumPy、Pandas、 Matplotlib 三個庫。NumPy :它是高性能科學計算和數據分析的基礎包。Pandas : 基於 NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。它可以算得上作弊工具。