Python基礎-列表

来源:https://www.cnblogs.com/fengyumeng/archive/2020/06/18/13160546.html
-Advertisement-
Play Games

什麼是列表? 列表是由一系列按照特定順序排列的元素組成,直觀理解就是:數組。 只不過python的列表有點特別,他不限制存儲的元素類型,使用手感上來說反倒更像是對標Java中的ArrayList。 flowers = ['Rose','Lily','Jasmine','Rosemary'] prin ...


什麼是列表?

列表是由一系列按照特定順序排列的元素組成,直觀理解就是:數組。 只不過python的列表有點特別,他不限制存儲的元素類型,使用手感上來說反倒更像是對標Java中的ArrayList。

 

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)

列印結果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']

 

創建空列表:

flowers = []

 

訪問元素

訪問列表中的元素,都是用索引來訪問,從0開始遞增。

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[0])

列印結果:
Rose

 

如果我要取最後一個元素呢?

其他編程語言的做法都是先取列表的總長度,然後總長度-1得到最後一個元素的索引。

在python里可以用-1來表示最後一個元素的索引:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-1])

列印結果:
Rosemary

 

取倒數第二個元素:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers[-2])

列印結果:
Jasmine

 

請註意:如果列表為空,那麼訪問最後一個元素會出錯,同樣的如果列表只有一個元素,訪問倒數第二個元素也會出錯。

 

字元串與列表

字元串是不是列表?

字元串就是由字元組成的序列,在某個視角上來看,字元串屬於是一種特殊的列表,但是它不等於列表,只是python這門語言提供了一些獨有的特性,使得我們可以用列表的操作方式來操作字元串。

word = 'abcdefg'
print(word[0])

列印結果:
a

 

字元串與列表的轉換

字元串雖然可以看成列表,但是它與列表的數據類型,應用場景,表現方式都完全不同,所以有些時候我們需要類型轉換。

 

字元串轉列表:

word = 'abcdefg'
print(word)
print(list(word))

列印結果:
abcdefg
['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

列表轉字元串:

flowers = ['Rose','Lily','Jasmine','Rosemary']
print(flowers)
print(''.join(flowers))

列印結果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']
RoseLilyJasmineRosemary

 

基礎操作

在列表末尾添加元素 insert()

word = []
word.append('a')
word.append('b')
word.append(2)
word.append('c')
print(word)

列印結果:
['a', 'b', 2, 'c']

 

請註意:很多操作方法是直接改變列表本身,方法本身不會有返回值,需要仔細留意。

 

在列表中插入元素 insert()

word = ['a','b','c','d']
word.insert(1,'xxx')
print(word)

列印結果:
['a', 'xxx', 'b', 'c', 'd']

 

刪除列表元素 del

word = ['a','b','c','d']
del word[1]
print(word)

列印結果:
['a', 'c', 'd']

 

彈出列表元素 pop()

pop是棧的標準操作,在這裡python提供了這一方法,可以彈出列表中的元素,彈出來的元素可以用變數接收,進一步供業務邏輯使用,而原列表的改變與del刪除元素相同,預設每次彈出列表末尾的元素。

word = ['a','b','c','d']
s = word.pop()
print(word)
print(s)

列印結果:
['a', 'b', 'c']
d

 

你也可以彈出任意位置的元素

word = ['a','b','c','d']
s = word.pop(0)
print(word)
print(s)

列印結果:
['b', 'c', 'd']
a

 

python沒有提供push方法,但是我們不管是需要先進先出還是先進後出的數據結構,都可以用 insert + append + pop 三個方法進行組合完成。

 

根據值刪除元素 remove()

如果你知道要刪除的值,但是不知道他的下標,那麼可以使用remove方法進行刪除

word = ['a','b','b','c','d']
word.remove('b')
print(word)

列印結果:
['a', 'b', 'c', 'd']

 

如你所見,remove只能刪除第一個值,如果你要刪除的值可能在列表中出現多次,那麼只能遍歷處理。

 

獲取列表長度 len()

word = ['a','b','c']
print(len(word))

列印結果:
3

 

元素在列表中出現的次數 count()

word = ['a','b','b','c','d']
i = word.count('b')
print(i)

列印結果:
2

 

合併列表 extend()

word = ['a','b','b','c','d']
num = [2,3,4]
word.extend(num)
print(word)

列印結果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]

 

實際上你也可以直接用加號 將兩個列表相加

word = ['a','b','b','c','d']
num = [2,3,4]
all = word + num
print(all)

列印結果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]

 

不同之處是 一個是在原列表上做擴充,一個是新建一個列表進行裝載。

 

組織列表

永久性排序 sort()

正序:

word = ['e','b','a','c','d']
word.sort()
print(word)

列印結果:
['a', 'b', 'c', 'd', 'e']

 

倒序:

word = ['e','b','a','c','d']
word.sort(reverse=True)
print(word)

列印結果:
['e', 'd', 'c', 'b', 'a']

 

臨時性排序 sorted()

臨時性排序不會改變原來的列表,而是sorted方法會返回一個排序後的結果列表。

word = ['e','b','a','c','d']
print(sorted(word))

列印結果:
['a', 'b', 'c', 'd', 'e']

 

同樣的  倒序也是加上reverse參數:

word = ['e','b','a','c','d']
print(sorted(word,reverse=True))

列印結果:
['e', 'd', 'c', 'b', 'a']

 

實際上sorted可以傳入任何序列,但它總是返回一個列表.

如下演示將一個字元串進行排序

word = 'ebdcgaf'
lis = sorted(word)
print(lis)
print(''.join(lis))

列印結果:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
abcdefg

 

反轉列表 reverse()

反轉列表與排序無關,僅僅是將列表元素反向排列。

word = ['e','b','a','c','d']
word.reverse()

列印結果:
['d', 'c', 'a', 'b', 'e']

 

那如果想要恢複列表怎麼辦呢? 那就把反轉之後的列表再反轉,也就恢復了。

 

遍歷列表

python中遍歷的寫法是for xx in list,末尾跟個冒號,第二行開始縮進,進入迴圈之中。

word = ['a','b','c']
for name in word:
    print('這個單詞是:' + name)

列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c

 

for迴圈中的代碼一律縮進,如果某一行沒縮進,就代表出了迴圈了。

word = ['a','b','c']
for name in word:
    print('這個單詞是:' + name)
print('已經迴圈完了哦')

列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c
已經迴圈完了哦

 

數字列表

快速生成 range()

你可以直接列印出一堆臨時生成的數字,range方法的參數為起止數字,但是不包含結束數字。

for num in range(1,5):
    print(num)

列印結果:
1
2
3
4

 

range方法的結果並不是一個直接可用的數字列表,如果要轉成列表,可以使用list方法將它轉化一下。

 

nums = list(range(1,5))
print(nums)

列印結果:
[1, 2, 3, 4]

 

range還有第三個參數,可以指定步長

nums = list(range(1,11,2))
print(nums)

列印結果:
[1, 3, 5, 7, 9]

 

列表統計 min、max、sum

統計列表中的最小值、最大值、值總和

nums = [1,2,3,4,5]
print(min(nums))
print(max(nums))
print(sum(nums))

列印結果:
1
5
15

 

列表解析

以下代碼為1-10這10個數字,按2步長取值,也就是1,3,5,7,9這五個數,每個數的平方組成一個列表

nums = []
for value in range(1,11,2):
    nums.append(value**2)
print(nums)

列印結果:
[1, 9, 25, 49, 81]

 

下麵用列表解析的特性來進行改寫

nums = [value**2 for value in range(1,11,2)]
print(nums)

 

雖然說列表解析的寫法對初學者來說不易閱讀,但是由於代碼量少,在老手眼裡反倒覺得這種寫法簡單直接,所以閱讀到別人寫的代碼的時候,有時候會看到這種寫法。

 

切片

切左切右切中間

除了使用索引來訪問單個元素之外,還可以使用切片來訪問指定範圍內的元素

 

訪問第2,3,4三個元素:

word = ['a','b','c','d','e','f']
print(word[1:4])

列印結果:
['b', 'c', 'd']

 

冒號前為開始切的索引,冒號後為結束的索引,但是不包含這個結束位置的元素。

 

如果你沒有指定開始索引,那麼切片將從0開始

列印前3個元素:

word = ['a','b','c','d','e','f']
print(word[:3])

列印結果:
['a', 'b', 'c']

 

同樣的如果沒有指定結束索引,那麼切片將切到列表最後

列印第4個元素到最後:

word = ['a','b','c','d','e','f']
print(word[3:])

列印結果:
['d', 'e', 'f']

 

也可以使用負數

列印最後三個元素

word = ['a','b','c','d','e','f']
print(word[-3:])

列印結果:
['d', 'e', 'f']

 

猜一猜:如果-3改成-13,結果會如何呢?

 

切整個列表

切整個列表實際上得到的內容就是列表本身,一般是複製列表的時候會這麼做。

word = ['a','b','c','d','e','f']
word2 = word[:]
print(word2)

列印結果:
['a', 'b', 'c', 'd', 'e', 'f']

 

帶著步長切

切片預設的步長為1,所以切片範圍是包含了所有元素,然而我們可以顯式的指定步長。

從3到15,每3個元素切一個:

nums = list(range(0,20))
print(nums[3:16:3])

列印結果:
[3, 6, 9, 12, 15]

 

切全部,每2個切一個元素:

word = ['a','b','c','d','e','f']
print(word[::2])

列印結果:
['a', 'c', 'e']

 

切全部,每2個切一個元素,倒著切:

word = ['a','b','c','d','e','f']
print(word[::-2])

列印結果:
['f', 'd', 'b']

 

步長可以為負數,但是不能為0,步長為0就沒法移動了。

 

列表運算

加法

兩列表相加,其實就是兩列表拼接,在上文講合併列表的時候已經有提過。

list1 = ['a','b','c']
list2 = ['d','e','f']
print(list1 + list2)

列印結果:
['a', 'b', 'c', 'd', 'e', 'f']

 

兩列表相加等於兩列表拼接,兩字元串相加等於兩字元串拼接,但是字元串是不能和列表相加的。

 

乘法

將列表與一個整數x相乘,將返回一個原列表重覆x次的新列表(如果x=0,那麼將返回空列表)。

list1 = ['a','b','c']
print(list1 * 3)

列印結果:
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

 

字元串也可以這麼玩:

name = 'abc'
print(name * 3)

列印結果:
abcabcabc

 

成員資格

檢查一個值是否包含在列表中,可以使用運算符in,這是一個布爾運算符。

words = ['a','b','c','d']
if('c' in words):
    print('包含c')

列印結果:
包含c

 

如果要檢查沒有包含在列表中呢?用not來判斷:

words = ['a','b','c','d']
if(not 'xxx' in words):
    print('這個xxx是沒有的')

列印結果:
這個xxx是沒有的

 

我們不僅可以檢查列表,還可以檢查字元串中是否包含某個字元串

words = 'abcdefg'
if('bc' in words):
    print('這個字元串包含了bc')

列印結果:
這個字元串包含了bc

 

結語

本文涵蓋了python列表的大部分常用知識點,還有一些其他操作比如clear(),copy(),index()等並未加以列出,感興趣的朋友可以自行拓展。

 


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

-Advertisement-
Play Games
更多相關文章
  • 常用設計模式思維導圖,大部分設計模式在spring和jdk源碼中都有體現。 在學習spring源碼前,有必要花一定時間瞭解設計模式。 ...
  • 訪問者模式是一種較為複雜的行為型設計模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素具有不同的類型,且不同的訪問者可以對其進行不同的訪問操作 模式動機 對於系統中某些對象,它們存儲在同一個集合中,且具有不同的類型。對於該集合中的對象,可以接受一類稱為訪問者的對象來訪問,不同的訪問者其 ...
  • 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流程狀態、查看 ...
  • #一、解釋器模式介紹 ##1、定義與類型 定義:給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 為瞭解釋一種語言,而為語言創建的解釋器 類型:行為型 #2、適用場景 某個特定類型問題發生頻率足夠高 ##3、優點 語法由很多類表示,容易改變及擴展此“語 ...
  • 首先是個人的一些閱讀源碼的小技巧,不一定適用每個人,可以直接跳過。 閱讀源碼的一些個人技巧 博客+總結 個人覺得大多數情況下跟著一篇優秀的博客配合著看就足夠了,之後再自己寫博客總結一遍加深印象,畫一下流程圖基本都能理順。(圖為學AQS時本人畫的獲取獨占鎖流程圖) 類關係 配合idea看類之間的關係( ...
  • 一、網格包佈局舉例 1.這裡構造一個3*3的佈局。 package com.bjpowernode.java_learning; ​ import java.awt.Frame; import java.awt.*; ​ public class D123_1_GridLayout { public ...
  • 1. Redis簡介 Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的API。Redis 是一個高性能的key-value資料庫。 redis的 ...
  • 博客園添加live2d看板娘 博客說明 文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝! 配置 添加代碼到博客園側邊欄公告 代碼 <script src="https://eqcn.ajz.miesnfu.com/wp-content/pl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...