python教程(五)·列表與元組

来源:https://www.cnblogs.com/featherl/archive/2019/02/23/10424783.html
-Advertisement-
Play Games

在介紹了通用的序列操作後,我們來學習序列類型中的列表和元組 列表 回顧 我們已經初步學習了列表,在深入之前,讓我們簡單回顧一下以往的知識。 創建列表的方法: 給元素賦值: 刪除元素: 上一節我們還學習了分片、相加、乘法等通用序列操作,這裡就不過多闡述 分片賦值 在上一節中,我們介紹了通用的序列分片操 ...


在介紹了通用的序列操作後,我們來學習序列類型中的列表和元組

列表

回顧

我們已經初步學習了列表,在深入之前,讓我們簡單回顧一下以往的知識。

創建列表的方法:

>>> list_1 = []  # 創建空列表
>>> list_2 = list()  # 創建空列表
>>> list_3 = [1,2,3,4]  # 創建帶有元素的列表
>>> list_4 = list('abcd')  # 創建一個列表 ['a','b','c','d']  (這是沒學習過的)

給元素賦值:

>>> x = [1,2,3]
>>> x[1] = 2  # 將索引為1的元素賦值為2
>>> x
[1, 2, 3]

刪除元素:

>>> del x[0]
>>> x
[2, 3]

上一節我們還學習了分片、相加、乘法等通用序列操作,這裡就不過多闡述

分片賦值

在上一節中,我們介紹了通用的序列分片操作。事實上,列表的分片操作並未在此停下腳步。

對於列表,我們還可以使用分片來批量賦值元素:

>>> x = list('abcd')
>>> x
['a', 'b', 'c', 'd']
>>> x[1:3] = list('ef')  # 將索引為1和索引為2的元素分別替換成'e'、'f'
>>> x
['a', 'e', 'f', 'd']

用於替換的序列不必要與原序列等長:

>>> x = [1,2,3,4,5]
>>> x[1:3] = ['a', 'b', 'c']  # list_1[1:3]長度為2,但我們替換的序列長度為3
>>> x
[1, 'a', 'b', 'c', 4, 5]

如果對分片很熟悉,理解下麵這個分片操作應該不會有難度:

>>> x = [1,2,3]
>>> x[1:1]
[]

截取索引1到索引1(不包括1)的元素,因為第二個索引的元素是不包括在返回的序列中的,而第一個索引的又是這個不應包括的元素,所以返回了空序列。

想象一下,list_1[1:1]這個空序列是索引0和索引1之間的“空隙”,那為什麼不是1和2之間呢?因為第二個索引1指定的是分片操作的終點,而分片又不包括終點,所以list_1[1:1]當然是終點索引1之前的空隙了。

說到這裡,讀者們是否有想到什麼清奇的操作呢? (⊙ˍ⊙)

藉助這個看似奇怪的邏輯,我們可以插入一個序列 (°ー°〃)

>>> x = [1,2,3,4,5]
>>> x[1:1] = ['a','b','c']
>>> x
[1, 'a', 'b', 'c', 2, 3, 4, 5]

對上面的代碼,我們可以理解成把一個空序列“替換”成一個新的序列。

既然可以插入,那麼批量刪除也是可以的:

>>> x = [1,2,3,4,5]
>>> x[1:4] = []
>>> x
[1, 5]

列表方法

append

append方法用於給列表在末尾追加一個元素:

>>> x = [1,2,3]
>>> x.append(4)
>>> x
[1, 2, 3, 4]
pop

pop方法用於移除指定索引(預設為-1,即尾部)的元素,並且返回這個元素:

>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)  # 移除索引為0的元素
1

提示:利用append和pop可以實現電腦中十分常見的一種數據結構——棧,棧是一種後進先出(LIFO,Last In First Out)的數據結構,push操作把元素放入棧,像堆疊積木一樣,pop操作把頂層的“積木”移除,也就是最後放置的元素最先拿出,把列表當作棧,只需用append方法實現push操作,用pop方法實現pop操作。本系列教程不涉及更深的數據結構的學習,有興趣的讀者可以找找課程學習。

insert

insert方法可以把元素插入到指定的索引之前:

>>> x = [1,2,3]
>>> x.insert(1, 'a')
>>> x
[1, 'a', 2, 3]

使用分片賦值也是可以的:

>>> x = [1,2,3]
>>> x[1:1] = []
>>> x[1:1] = ['a']
>>> x
[1, 'a', 2, 3]

不過比起insert方法,分片賦值的方式可讀性比較差

remove

remove方法用於移除列表中某個元素的第一個匹配項:

>>> x = [1,2,3,2,1,3]
>>> x.remove(2)
>>> x
[1, 3, 2, 1, 3]
>>> x.remove(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

相信大家也看到,如果元素不存在,程式將拋出錯誤

index

index方法用於返回某個元素的第一個匹配項的索引:

>>> x = [1,2,3,2,1,3]
>>> x.index(3)
2

同樣的,如果元素不存在,則拋出錯誤:

>>> x.index(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 5 is not in list

count

count方法用於數數,數什麼數?數元素出現的次數:

>>> x = [1,2,3,2,2,1]
>>> x = [1,2,[2],2,[1,2],2]
>>> x.count(2)
3
>>> x.count([1,2])
1
>>> x.count(11)
0
extend

extend方法用於附加一個序列至列表末尾:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

這個操作類似於序列相加操作:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a = a + b
>>> a
[1, 2, 3, 4, 5, 6]

但是使用extend方法效率比較高

我們還可以使用分片賦值的方式來實現與extend相同的效果:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[len(a):] = b
>>> a
[1, 2, 3, 4, 5, 6]

但這比起extend,可讀性變差了,所以還是使用extend方法比較好

reverse

reverse方法用於翻轉列表:

>>> x = [1,2,3,4,5]
>>> x.reverse()
>>> x
[5, 4, 3, 2, 1]

如果僅僅想得到翻轉後的列表,而不修改原列表,可以使用反向索引的分片來實現:

>>> x = [1,2,3,4,5]
>>> x[::-1]
[5, 4, 3, 2, 1]

如果需要反向迭代列表,還可以使用reversed函數創建一個反向迭代列表的迭代器:

>>> x = [1,2,3,4,5]
>>> for i in reversed(x):
...     print(i)
... 
5
4
3
2
1
>>> list(reversed(x))  # 還可以使用list函數來將迭代器轉換成列表
[5, 4, 3, 2, 1]
sort

sort方法用於對列表進行排序。

>>> x = [3,2,4,8,6]
>>> x.sort()
>>> x
[2, 3, 4, 6, 8]

要註意的是這個方法是對原列表進行修改的,如果不想修改原列表而獲取排序結果,可以使用sorted函數:

>>> x = [3,2,4,8,6]
>>> sorted(x)
[2, 3, 4, 6, 8]

sort方法還可以自定義排序的方式,比如把10排在1之前,把'a'排在3之前等等,在python2中只需提供一個參數,這個參數是一個比較函數,但是python3取消了這個參數,需要使用其它方式來自定義排序的方式,這裡就不深入瞭解了,讀者們可以去python官網查看文檔學習。


元組

元組的基本操作和列表一樣,但是元組是不可修改的,所以沒有append、remove等修改序列的方法,只有count和index方法。

基本操作如下:

創建元組:

>>> tuple_1 = () # 空元組
>>> tuple_2 = tuple()  # 空元組
>>> tuple_3 = 1,2,3
>>> tuple_4 = (1,2,3,4)

索引元素:

>>> x = (1,2,3,4)
>>> x[1]
2

count、index方法:

>>> x = (1,2,2,3,4,5,3,2)
>>> x.count(2)
3
>>> x.index(3)
3

還有分片、相加等通用序列操作,上節已介紹,這裡不過多闡述

元組的意義在於:

  1. 元組可以作為字典等映射類型的,而列表不可以,因為鍵必須是不可變的,元組剛好就是不可變類型,而列表是可變類型。
  2. 函數返回多個值的時候,其實就是返回了一個元組,我們必須對元組進行處理。

好了,本節到此結束,下期再見!

ヾ( ̄▽ ̄)Bye~Bye~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:中華石杉 來源:https://github.com/doocs/advanced java/blob/master/docs/high concurrency/mq time delay and expired failure.md 一、面試題 如何解決消息隊列的延時以及過期失效問題?消息隊 ...
  • 題意 "題目鏈接" Sol 這題可以動態dp做。 設$f[i]$表示以$i$為結尾的最大子段和,$g[i]$表示$1 i$的最大子段和 那麼 $f[i] = max(f[i 1] + a[i], a[i])$ $g[i] = max(g[i 1], f[i])$ 發現只跟前一項有關,而且$g[i]從 ...
  • 寫在前面的話: 在第一學期做項目的時候用到過相應的知識,覺得挺有趣的,就記錄整理了下來,基於C/C++語言 原貼地址:https://helloacm.com/cc-linear-regression-tutorial-using-gradient-descent/ 前言 在機器學習和數據挖掘處理等 ...
  • 1. 概述 自增操作符(++)和自減操作符(--)是對變數進行加1和減1的操作。 2.分類說明 ++和--是對變數進行自增1和自減1的簡寫操作符。許多編程任務中經常需要對變數加1或者減1,所以採用這兩個操作符會方便許多。例如,下麵的代碼是對i自增1,而對j自減1: i++讀為i加加,i--讀為i減減 ...
  • 0.遇到一個問題代碼func GetMap (i interface{})(map[string]interface{}){ if i == nil { //false ??? i = make(map[string]interface) fmt.Println("xxxxx") }}var tes... ...
  • 前言 上一篇四種途徑提高RabbitMQ傳輸消息數據的可靠性(一)已經介紹了兩種方式提高數據可靠性傳輸的方法,本篇針對上一篇中提出的問題(1)與問題(2)提出解決常用的方法。 本文其實也就是結合以上四個方面進行講解的,主要參考《RabbitMQ實戰指南》(有需要PDF電子書的可以評論或者私信我),本 ...
  • 基礎數據類型 1、什麼是數據類型? 我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行 ...
  • 為了防止服務消費鏈(多級服務之間的調用)上因某個服務出現故障,而導致級聯故障,進而造成整個系統不可用(簡稱為:雪崩效應),推出了熔斷、降級的處理方式:Hystrix斷路器(類似生活中電路保險絲)來解決這些潛在問題。 熔斷、降級是兩個概念,網上也有很多相關的說明,我這裡簡單通俗說明一下: 熔斷:當服務 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...