Python數據類型串講(中)

2021-01-10 CDA數據分析師

1、序列

1.1 序列簡介

所謂序列,即元素的有序排列。序列中每個位置的元素都有其對應的唯一編號,也就是說我們可以通過元素的位置標識,去搜索到該元素。python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。

1.2 序列通用操作

索引(indexing)

序列的索引即上文介紹的序列中元素的位置標識,按標識順序分為正向遞增序號(簡稱正序)和逆向遞減序號(簡稱逆序)。正序標識即由左往右,索引從0開始遞增,索引為0表示第一個元素,索引為1表示第二個元素,以此類推。以變量x='HELLO WORLD!'為例:

逆序標識即由右往左,索引從-1開始,索引為-1表示逆序第一個元素,索引為-2表示逆序第二個元素,以此類推。以字符串'HELLO WORLD!'為例:

根據字符串的索引,我們可以提取出對應位置上的元素,例如需要提取字符'R',可以使用正索引即'x[8]'去提取,也可以使用逆索引即'x[-4]'去提取。

x='HELLO WORLD!'#正序提取x[8]#逆序提取x[-4]

以上代碼執行結果為:

切片(sliceing)

使用索引提取序列元素不需要新創建變量,非常方便,但使用索引每次只能提取字符串中的單個字符,而實際運用中往往需要一次提取多個字符,這時便可以使用序列的另一特性:切片。切片是指通過序列的索引提取出指定範圍內的元素作為新的序列。

語法:obj [startindex:endindex:step]

obj:變量名

start_index:[可選參數],切片起始索引,默認為0(正序)或-1(逆序)

end_index:[可選參數],切片結束索引,默認為最後一個元素對應索引(正序),或第一個元素對應索引(逆序)

step:切片步長,默認為1

注意:序列中切片取值範圍為左閉右開,即包含起始索引,不包含結束位置。

x='HELLO WORLD!'

############ 提取字符'LLO'###########

x[2:5:1] #使用正索引

x[-10:-7:1] #使用負索引

x[2:5] #步長為1時可省略參數step

############ 提取字符'WRD'###########

x[6:11:2] #使用正索引,步長為2

x[-6:-1:2] #使用負索引,步長為2

############ 提取字符'LRO'###########

x[-3:-6:-1] #使用負索引,逆序提取

x[9:6:-1] #使用正索引,逆序提取

############ 正序提取所有字符 ##########

x[::] #三個參數皆可省略

############ 逆序提取所有字符 ##########

x[::-1] #步長為-1,不可省略

注意:正序提取時,起始索引應小於結束索引;逆序提取時,起始索引應大於結束索引,否則返回值為空序列 []。

相加(adding)

序列中類型相同的序列可以進行加法操作,即把兩個或多個序列拼接起來,注意不是數值上的加法運算(元素為數字型時容易混淆)。

x1='talk is cheap'x2=','x3='show me the code'print(x1+x2+x3)

以上代碼執行結果為:

相乘(multiplying)

類似於數學運算上的乘法運算,一個序列乘上一個正整數n,相當於將該字符串重複n次連接成一個新序列。

x='python 'print(x*3)

以上代碼執行結果為:

元素存在判斷

使用python的關鍵字「in」或「not in」,可以判斷指定元素是否存在該序列中或是否不存在該序列中,滿足條件則返回True ,不滿足條件則返回False 。

x='python ''t' in x'i' in x

以上代碼執行結果為:

序列相關BIF

len():返回序列所含元素的數量

max():返回元素中的最大值

min():返回元素中的最小值

x='python'len(x)max(x)min(x)

當序列中元素的類型是字符串型時,使用max()或min()將對字符串進行按位比較,即對字符串中各元素的ascii碼進行比較,輸出最大值或最小值。

2、列表

在對序列有了大體的認識後,現在開始介紹序列中最具代表性的數據類型——列表。

python中列表以中括號'[ ]'為標識,將一個或多個元素(以逗號分隔)括起來為一個列表,其元素可以為python中任意一種數據類型包括列表本身,且各元素不需要具備相同的數據類型。列表可以簡單理解為我們日常生活中超市每天的購物記錄,其中每個人的購物記錄為列表中的元素,每個人可以購買不同類型的物品,且購買數量往往不一致。

#創建列表x_listx_list=[2333,'python',['a','b','c']]print(x_list)

以上代碼執行的結果為:

除了上面1.2節介紹的序列通用操作外,列表還有其他一些比較常用的操作。

2.1 元素的更新

2.1.1 元素的修改

列表通過直接對元素的索引位置賦新值來修改元素。

語法:變量名[需修改元素的索引]=新值

#將變量x_list索引為0的元素修改為2222x_list[0]=2222print(x_list)

以上代碼執行結果為:

2.1.2 元素的刪除

列表通過對元素的索引位置,使用del語句來刪除列表的元素。

del 列表名[需刪除元素的列表]

#刪除變量x_list索引為1的元素del x_list[1]print(x_list)

以上代碼執行結果為:

2.2 常用方法

2.2.1 元素的增加

append():在列表最後添加一個新的元素語法:列表名.append(添加的元素)#在列表x_list最後添加元素'MySQL'x_list.append('MySQL')print(x_list)以上代碼執行結果為:注意:若添加的新元素為列表,append()會保存其列表形式添加到最後#在列表x_list最後添加元素['MySQL','SPSS']x_list=[2333,'python',['a','b','c']]x_list.append(['MySQL','SPSS'])print(x_list)以上代碼執行結果為:extend():在列表最後添加一個新列表內的多個元素語法:列表名.extend(添加的列表)與方法append()不同,extend()中添加的元素只能是列表類型,且不保存其列表形式,即將需要添加的列表裡的元素一一提取出來後再添加到原列表。x_list=[2333,'python',['a','b','c']]x_list.extend(['MySQL','SPSS'])print(x_list)以上代碼執行的結果為:insert():根據指定索引插入新的元素語法:列表名.insert(插入位置的索引,插入的元素)#在變量索引為1的位置插入元素'MySQL'x_list=[2333,'python',['a','b','c']]x_list.insert(1,'MySQL')print(x_list)以上代碼執行結果為:2.2.2 元素的刪除

pop():刪除指定索引(默認為-1)對應的元素,並返回所刪除的值語法:列表名.pop(索引值)#刪除變量中索引為1的元素x_list=[2333,'python',['a','b','c']]x_list.pop(1)print(x_list)以上代碼執行結果為:remove():刪除指定元素,若匹配到多項,僅刪除匹配到的第一項語法:列表名.remove('需刪除的元素')#刪除指定元素'a',僅刪除匹配到的第一項z_list=['a','b','c','a']z_list.remove('a')print(z_list)以上代碼執行結果為:clear():清空列表裡所有元素,返回一個空列表語法:列表名.clear()#清空變量x_list的所有元素x_list=[2333,'python',['a','b','c']]x_list.clear()print(x_list)以上代碼執行結果為:2.2.3 元素的查找

index():查找元素首次出現位置對應的正索引語法:列表名.index(查找的元素,起始索引,結束索引)#查找元素'python'在變量x_list中首次查找到位置的索引x_list=[2333,'python',['a','b','c']]x_list.index('python')以上代碼執行的結果為:注意:若查找的元素不在該列表中會報錯誤提示。count():查找元素在該列表中出現的次數語法:列表名.count(查找的元素)#查找元素'python'在變量x_list中出現的次數y_list=[2,3,4,5,2,2,3]y_list.count(2)以上代碼執行結果為:注意:列表中沒有方法find()。2.2.4 元素的排序

sort():對列表元素進行排序,返回元素按升序(默認)或降序排列的列表語法:列表名.sort(reverse=True/False)reverse:可選參數,默認為True即升序,若為False即降序#對變量y_list的元素進行降序排列y_list=[2,3,4,5,2,2,3]y_list.sort(reverse=True)print(y_list)以上代碼執行結果為:reverser():將列表內元素按逆序排列語法:列表名.reverser()#對y_list的元素進行逆序排列y_list=[2,3,4,5,2,2,3]y_list.reverser()print(y_list)以上代碼執行結果為:2.2.5 列表的複製

copy():用於複製列表用法:列表名.copy()y_list=[2,3,4,5,2,2,3]y=y_list.copy()print(y)

以上代碼執行結果為:

注意區分賦值、淺複製copy()、深複製deepcopy():

賦值:對象的簡單引用淺複製:複製列表的父對象,但不複製對象內部的子對象深複製:複製列表的父對象及子對象,需先導入copy模塊2.3 常用內置函數

除了序列通用的內置函數:len()、max()、len(),列表還含有以下內置函數:

list():將其他類型強制轉化為列表zip():將多個列表或元祖(後續會介紹)對應位置的元素組合為元祖,返回 zip對象enumerate():將一個可遍歷對象(如列表、字符串)組合成一個含數據和數據索引的序列3、元祖

3.1 元祖簡介

元祖與列表一樣是python的一種序列類型,可以使用序列的所有通用操作。元祖在python中以小括號「()」為標識,將一個或多個元素(以逗號分隔)括起來為一個元祖,其用法與列表非常類似,二者主要區別在於,列表內的元素可以修改,元祖內的元素不能修改,可以簡單把元祖理解為列表的一個「可讀版本」。

#元祖的創建x_tuple=('a',2,[3,4])print(x_tuple)#元素修改會報錯x_tuple[1]=3

以上代碼執行結果為:

注意:創建只有一個元素的元祖時,需要在後面加一個逗號,否則會返回元素本身。因為在python中小括號「()」同時也是數學運算上的一個基本符號,如(1+1)^2,如果創建只有一個元素的元祖時不加逗號分隔,python解釋器會將小括號識別為數學運算符號。

y_tuple=(2333,)print(y_tuple)z_tuple=(2333,)print(z_tuple)

以上代碼執行結果為:

3.2 常用方法及內置函數

3.2.1 常用方法

由於元祖的元素不可變性,元祖無法對元素進行增加、刪除、排序及複製操作,元祖中元素的查找與上述列表中用法一致。

x_tuple=('a',2,[3,4])#元素的查找x_tuple.index('a')#元素的複製x_tuple.count(2)

以上代碼執行的結果為:

注意:當元祖中所含元素為列表(可變序列)時,該列表嵌套項是可變的。

x_tuple=('a',2,[3,4])#修改列表[3,4]中的元素,元祖也隨之'變化'x_tuple[2][1]=3print(x_tuple)

以上代碼執行結果為:

3.2.2 常用內置函數

len(tuple):返回元祖元素的個數max(tuple):返回元祖元素最大值min(tuple):返回元祖元素最小值tuple(seq):將序列轉換為元祖3.2.3 選擇元祖or列表

特點:列表:動態存儲,長度大小可變,可對元素進行增刪查改等操 作,但儲存內存較大,性能偏差;元祖:靜態存儲,長度大小固定,不可隨意更新數據,內存佔用空間小,處理速度快;使用場景:列表:需隨時對數據進行更改,不考慮性能;元祖:1. 數據需要被「鎖定」,不能隨意更改; 2. 對性能有要求,如遍歷; 3. 作為數據結構的一部分,如字典的key

相關焦點

  • python數據類型總結——列表
    python用列表或元組來幫助我們。python列表一系列元素組成一個集合,可能通過索引,對每個元素進行訪問。這種數據類型統稱為序列。在python中,字符串就是一種序列。如下:嵌套列表demo中也隱藏著提示:列表中每個元素的類型可以是不相同的。
  • Python基礎學習之常用六大數據類型
    剛開始學習一門程式語言,除了了解運行環境與語言類型之外,最基本還是從該語言的基本數據類型開始學起。Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。
  • Python之list列表數據類型講解
    前言在python中,list列表數據類型其實就是一個容器,可以放置大量元素的集合。同時,list列表也有很多特點和使用場景,本文主要講解list列表的函數方法。概念list列表是一個集合,一個容器,同Java語言中的數組是一樣的,唯一的不同之處在於,Java中的數組類型只能放置同一種數據類型,而Python中的列表可以放置不同的數據類型。
  • Python數據類型之字典dict
    # 字典是一種可變容器類型,可存儲任意類型對象# 字典以鍵值對存儲數據,key-value形式,鍵值之間使用冒號:分隔,每個鍵值中間用逗號,分隔# 字典包含在大括號,花括號{}中# python中鍵必須是不可變的,但值可取任何數據類型# 元組可以作為 dict 的 key,但列表不能作為元組的 key,dict 要求
  • Python數據類型之列表list
    # 列表是python中最基本的數據結構,它是一個有序序列,序列中的每個元素都分配一個數字(位置,索引)# 1、我們可以使用 方括號,中括號[]來創建列表# 2、我們可以直接將序列放在list(seq)
  • 完美契合人類習慣的Python變量和基本數據類型
    做科學計算和數據分析,變量是始終繞不開的話題。學習程序設計語言,理解了變量相當於掌握了一半。不過,不同程式語言對變量的定義、使用和釋放區別很大。Python中的變量到底是什麼,該怎麼樣掌握變量?從我接觸的語言中,Python和Matlab幾乎是最簡單的,特別容易掌握。
  • numpy中的數據類型對象有哪些
    Numpy數據類型numpy是一個python擴展包,它可以為我們提供更精確的科學技術,更強大的數學能力。為此,numpy定義了比python更豐富的數據類型來達成目的。數據類型以上就是一系列Numpy中提供的數據類型。需要理解的是,Numpy中的數據類型,和python本身的數據類型是不同的。Numpy中的數據類型,實質是數據類型對象dtype的實例。
  • 「python學習手冊-筆記」003.數值類型
    ,python的數字類型還包括布爾類型.小數python2.4之後引入了小數這種數據類型,正式名稱叫做Decimal. 需要注意的是python中的Decimal類型和浮點數不是一個東西. 小數很像浮點數,但是小數有固定的位數和小數點.比如,我們可以使用小數對象實現一個只有兩位小數位精度的浮點數.
  • Numpy基礎:創建ndarray及數據類型
    它接受一切序列型的對象(包括其他數組),然後產生一個新的含有傳入數據的Numpy數組。np.array會嘗試為新建的這個數組推斷出一個較為合適的數據類型。數據類型保存在一個特殊的dtype對象中。其他一些可以新建數組的函數。比如zeros和ones分別可以創建指定長度或形狀的全0或全1數組。empty可以創建一個沒有任何具體值的數組。
  • python while循環、數據類型
    1.方法1、嵌套將一系列字典存儲在列表中,或將列表作為值存儲在字典中,這成為嵌套2、range(數字)返回一系列數字,設定循環多少次3、append()末尾添加4、items()以列表的形式返回可遍歷的(鍵值)元組數值。
  • Python輸出數據print,獲取輸入數據input,基礎入門
    python的輸入和輸出一、print輸出print 默認輸出是換行的,如果要實現不換行需要在變量末尾加上 end=""如:print把內容輸出到文件二、input輸入print是輸出,input接收鍵盤的輸入input()函數,是python的內置函數,接收任意數據類型的輸入,將所有輸入的數據,定義為字符串來進行處理
  • Python中數據類型,你知道多少
    4.3 數據類型想一想,下面代碼執行會報錯嗎?print(10 + '20')在Python中,有如下基本的數據類型:數據類型如何判斷一個變量是什麼數據類型# 使用type輸出變量的類型name = "Alice"print(type(name))# 輸出結果為:字符串
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    高級編程(6套課程) 注:零基礎全能篇中,針對windows和liunx系統均有兩套課程可供選擇學習,單純學python,哪個系統都一樣,初學者只需選擇自己熟悉的系統學習相應課程即可。 因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    2、為什麼要懂HTMLHTML是一種用於創建網頁的標記語言,該網頁嵌入了諸如文本和圖像之類的數據,這些數據可以被瀏覽器讀取並呈現為我們看到的網頁。這就是為什麼我們首先爬網HTML,然後解析數據的原因,因為數據隱藏在HTML中。
  • 數據科學的Python軟體包
    R更快,並且包含更多的計算和統計庫;但是,在本文中,我們僅介紹了頂級Python數據科學庫,如果您想掌握數據科學,則應該了解這些庫。數據科學導論目前,業務數據已變得與金錢一樣有價值。當前,我們正處於大數據時代,每秒生成大量數據。大企業正在利用這些數據來促進市場增長。使用數據科學和其他技術,我們從數據中提取信息性細節,以解決複雜的現實世界問題並建立預測模型。
  • python教程之python數學運算
    中進行分數(fraction)運算分數運算是python中的一個模塊(module)。#對分數進行運算>>> Fraction(2,8)+1+1.52.75運算中如果出現float數據類型,最終的結果將是float類型數據。如果運算式中只有integer類型和fraction類型,輸出結果將是fraction類型。
  • 乾貨|如何利用Python處理JSON格式的數據,建議收藏!
    本文轉載自【微信公眾號:數據分析與籃球,ID:dylanxia2019】經微信公眾號授權轉載,如需轉載與原文作者聯繫JSON數據格式在我們的日常工作中經常會接觸到,無論是做爬蟲開發還是一般的數據分析處理,本文小編就來分享一下當數據接口是JSON格式時,如何進行數據處理進行詳細的介紹
  • 初識python
    :python ,php,等等。4,python的發展。5,python種類。變量:就是將一些運算的中間結果暫存到內存中,以便後續代碼調用。1,必須由數字,字母,下劃線任意組合,且不能數字開頭。2,不能是python中的關鍵字。
  • 數據工程師需要掌握的 18 個 Python 庫
    作者 | 劉早起早起責編 | 屠敏本文對Python中在數據分析中需要掌握的庫進行了整理,一起來看看吧!它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。我們可以啟用選擇器(例如XPath,CSS)從網頁中提取數據。我們需要先安裝Twisted,因為直接安裝scrapy的話,安裝會失敗。