Python基礎學習 -- 列表與元組

来源:http://www.cnblogs.com/hadoop2015/archive/2017/08/03/7282475.html
-Advertisement-
Play Games

返回到Python知識體系 本節學習目的: 掌握數據結構中的列表和元組 應用場景: 編程 = 演算法 + 數據結構 數據結構: 通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合,這些元素可以是數字或者字元,或者其他數據結構. 容器: 序列,映射,集合是三種比較常見的數據結構 序列: 每個元 ...


 

返回到Python知識體系

 

本節學習目的:

       掌握數據結構中的列表和元組

應用場景:

       編程 = 演算法 + 數據結構

       數據結構: 通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合,這些元素可以是數字或者字元,或者其他數據結構.

       容器: 序列,映射,集合是三種比較常見的數據結構

       序列: 每個元素都有一個編號,也叫做索引

       映射: 每個元素都有一個名字,稱為鍵值對

       集合: 內部元素都是不重覆的

聯繫本文作者交流或者索取相關代碼及軟體請加入QQ群:小馬哥的技術分享 413939157.

(一)   序列概覽

內建序列種類

列表和元組區別

列表和元組的應用場景

1,使用元組作為字典的鍵,因為鍵不可修改,所以就不能使用列表

2,需要操作一組數值的時候,序列很好用

序列裡面也可以包含其他序列

(二)   序列通用操作

2.1   索引

序列的特點就每個元素都有自己位置的編號,並且編號是在0開始的,用於找到某個位置上的元素.

正號索引: 開頭第一個元素,索引為0開始

負號索引: -1代表倒數第一個元素,-2代表倒數第2個元素,依次類推. 

實例2.1.1

greeting = 'hello world'
print(greeting[0])

print(greeting[-1]) 

案例2.1.2
接收控制台輸入年月日,列印年月日的英文格式.
'''
1,
輸入年月日
    定義年月日三個變數分別接收輸入
    定義兩個序列分別存儲對應的英文月日
2,格式化: 怎樣對輸入的月數字,轉變為英文-->索引
'''
year = input("請輸入年: ")

month = input("請輸入月份(1-12): ")
day = input("請輸入日期(1-31): ")
e_month = ['January','February','March','April','May','June','July','August','September','October','November','December']
e_day = ['st','nd','rd']+17*['th']+['st','nd','rd']+7*['th']+['st']
e_date = e_month[int(month)-1]+' '+e_day[int(day)-1]+' '+year
print(e_date)

 

2.2   分片

應用場景: 索引僅僅是取一個元素,如果要一次取一定範圍內的多個元素呢?

使用方法: 冒號分割的兩個索引表示邊界範圍,[開始索引: 結束索引]  <-註意不包括結束索引位置上的元素

實例2.2.1 分片

greeting = 'hello world'   #字元串長度是11
print(greeting[0:1])

print(greeting[0:11])

問題: 如果對分片修改會修改原字元串嗎?

實例2.2.2 訪問最後面n個元素

numbers = [1,2,3,4,5,6,7,8,9,10]
print(numbers[7:11])
# [8, 9, 10]   訪問序列的後面三個元素
print(numbers[-1:-3])

# [] 沒有數據的原因: 左邊界索引一定要小於右邊界索引
print(numbers[-3:-1])

# [8, 9] 只有兩個元素的原因: 半開半閉區間,只包括左邊界索引位置上的元素,不包括右邊界索引位置上的元素
print(numbers[-3:])

# [8, 9, 10] 預設寫右邊界索引: 這樣範圍就是預設取到最後一個元素
print(numbers[:-1])

# [1, 2, 3, 4, 5, 6, 7, 8, 9] 預設寫左邊索引: 範圍預設在第一個元素開始取
print(numbers[:])

# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  兩個邊界都預設: 範圍就是全部了

上面的分片都是挨個取元素,也就是步長為1,還可以設定步長取出元素

#預設步長的分片如上面,其實是預設了一個參數
print(numbers[0:11:1])

#設定步長的分片
print(numbers[0:11:2])

 

 

2.3   相加/連接

本質: 連接操作

操作: 連接操作

print([1,2,3,4,5]+[6,7,8,9,10])
print('hello '+ 'world')
print([1,2,3,4,5]+'hello world')# 註意:這裡是要拋錯的,Python是強數據類型,也就是不會自動隱式轉換數據類型,所以在這裡只有兩種相同數據類型的序列才能相加

 

2.4   乘法

其實在上面已有例子使用到了數列的乘法,本質上就是多個數列相加

  [1,2,3,4,5]*10

  ‘string’*10

實例2.4.1 創建一個10個元素的序列,但是裡面上面都不存

   [none]*10

  none = [None]*10

  print(len(none))  #現在還學到長度,這是我猜的一個函數

 

 

2.5   成員資格

用於檢查某個元素是否屬於序列的成員,使用布爾運算符in

返回值成為布爾值: 條件為真返回True,為假返回False.

print(None in none)    #返回True
print('P' in  'python')  #返回False
 
# 查看用戶名和密碼是否存在
accout = [['mali','123'],['hadoop','java'],['spark','scala'],['ml','python'],['google','go']]

print(['mali','123'] in  accout)      #返回True
print('mali' in  accout)              #返回False 

2.6   長度,最小值,最大值

查看列表長度: len函數

min函數: 序列中最小的元素

max函數: 序列中最大的元素

實例2.6.1

  print(len(account))

 print(max(account))
 print(min(account))
 

  >>> max('java','Java','scala','python')

  'scala'

  >>> min('java','Java','scala','python')

  'Java'

(三)   列表

3.1 列表的特點

字元串不能修改,於是可以將字元串轉變為列表處理

列表是可以對元素進行增刪改查的

3.2 list函數

先看如下代碼,可以對字元串進行拼接,可以根據索引查詢字元串

content = "hello python"
print("a"+"b")

print(content+'a')
print(content[0])

但是,如果修改字元串某個位置上的字元是否能成功呢?

  >>> content = "hello python"

  >>> content[0]='a'

  Traceback (most recent call last):

    File "<stdin>", line 1, in <module>

  TypeError: 'str' object does not support item assignment

結果是直接拋錯

 

如何滿足修改字元串的需求呢?

list函數可以將一個字元串轉成一個列表類型,其實這個強轉’123’到123一樣的道理: int(‘123’)

  >>> list(content)

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

 

3.3 基本的列表操作

前面序列的通用操作中各種方法都適用於list,並且list還有自己的獨特操作,上面字元串不能修改,list可以修改就是一種,還有下麵的

  1. 修改列表元素

  >>> list(content)

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> chars = list(content)

  >>> chars

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> chars[0] = 'H'

  >>> chars

  ['H', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

       註意: 不能為一個位置不存在的元素進行賦值

         >>> len(chars)

  12

  >>> chars[12]='!'

  Traceback (most recent call last):

   File "<stdin>", line 1, in <module>

  IndexError: list assignment index out of range

 

  1. 刪除元素

使用del函數

>>> nums = [1,2,3,4,5,6]

>>> nums

[1, 2, 3, 4, 5, 6]

>>> del(nums[5])

>>> nums

[1, 2, 3, 4, 5]

>>> len(nums)

5    #長度變為5

  1. 分片賦值

作用: (1)同時為多個元素進行賦值; (2)替換;(3)還可以用來插入;

實例1: 賦值與追加

       >>> name = list("hadoop")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p']

  >>> name[6:] = list("空格java")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

實例2: 替換/修改元素

              >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

  >>> name[7:] = list("python")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

實例3: 插入元素

       >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> name[0:0] = list('hello ')  #因為分片是半開半閉區間,所以這個時候分片是空的,這個操作也就變成插入了

  >>> name

  ['h', 'e', 'l', 'l', 'o', ' ', 'h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

       分片也是可以用來刪除的,del函數

3.4 列表方法

方法: 通過對象調用的函數

       使用: 對象.方法(參數)

       1,append

       2,count

       3,extend

       4,index

       5,insert

       6,pop

       7,remove

       8,reverse

       9,sort

       10,高級排序

(四)   元組

定義: tuple也是序列,和序列中的列表list不同的是,元組tuple不能修改(字元串也是不能修改的)

使用:

       創建一個tuple,通過圓括弧定義,或者直接逗號分隔的一些值

              >>> 1,2,3

  (1, 2, 3)

  >>> ('a','b','c')

  ('a', 'b', 'c')

  >>> t1 = ('java','scala','python','go','javascript')

  >>> t1

  ('java', 'scala', 'python', 'go', 'javascript')

  >>> type(t1)

  <class 'tuple'>

空元組: ()

              >>> type(())

  <class 'tuple'>

特別註意: 一個元素的元組,也是元組,但是形式要特別註意

              >>> a = ('a')    #雖然也包括在圓括弧裡面,但是檢查類型, 是str

              >>> type(a)

  <class 'str'>

  >>> b = ('b',)       #儘管只有一個元素,也要加上逗號

  >>> type(b)

  <class 'tuple'>

再例如:

       >>> 100      #這是一個數

  100

  >>> 100,       #加上逗號,這是一個元組

  (100,)

再看一個例子:

       >>> 10*(100+100)   #在這裡沒有逗號,屬於四則運算,括弧輸入運算符號

  2000

  >>> 10*(100+100,)       #在這裡有逗號,屬於元素,對裡面的元素進行拼接

  (200, 200, 200, 200, 200, 200, 200, 200, 200, 200)

tuple函數

       tuple函數和list函數一樣,將參數(參數在這裡是序列)轉換為元組,其實就是類型轉換

       >>> ittech = ['hadoop','spark','storm','kylin','hive','hbase']

  >>> ittech

  ['hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase']  #註意括弧: 是中括弧

  >>> type(ittech)

  <class 'list'>  #註意這裡

  >>> 

  >>> t_ittech = tuple(ittech)

  >>> t_ittech

  ('hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase')      #註意括弧: 是圓括弧

  >>> type(t_ittech)

  <class 'tuple'>     #註意這裡

基本元組操作

       元組只有創建和訪問操作.訪問操作和其他序列一樣,通過索引訪問,也有分片訪問操作

元組的存在意義

       在映射中當做鍵使用,不可以被改變

 

返回到Python知識體系

 

聯繫本文作者交流或者索取相關代碼及軟體請加入QQ群:小馬哥的技術分享 413939157.

 


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

-Advertisement-
Play Games
更多相關文章
  • 對數據加密分兩種,一種是對資料庫本身進行加密,另一種是對數據表中的數據進行加密, 如果SQLite資料庫加密,我這裡使用的一個管理工具叫SQLiteDeveloper,如下就可以加密資料庫 , 如果在工具中不提供密碼的情況下打開資料庫,會給你錯誤提示如下: , 或者在C# 使用錯誤的密碼也會給你錯誤 ...
  • 在地圖上畫一個多邊形保存的時候出現 在執行用戶定義常式或聚合 "geography" 期間出現 .NET Framework 錯誤:System.ArgumentException: 24200: 指定的輸入不代表有效的地理實例 的提示,找了很久沒有找到解決辦法,最後發現畫多邊形的時候換個方向開始畫 ...
  • IEnumerable 只有一個方法:IEnumerator GetEnumerator(). INumerable 是集合應該實現的一個介面,這樣,就能用 foreach 來遍歷這個集合。 IEnumerator 有Current屬性,MoveNext(), Reset()兩個方法。 當 fore ...
  • 如下是我做開發這幾年經常使用一些技術和工具,當然這些技術也都是需要加強的(有些是我一直使用的,不過不深入,有些內部的原理等等不是很清楚) 前端部分: 1)HTML:網頁的核心語言,構成網頁的基礎 2)CSS:使網頁更加豐富多彩燦爛的利器 3)JavaScript:使網頁動起來的根本,加強了網頁和用戶 ...
  • 加 Golang學習 QQ群共同學習進步成家立業工作 ^-^ 群號:96933959 net import "net" net包提供了可移植的網路I/O介面,包括TCP/IP、UDP、功能變數名稱解析和Unix域socket。 雖然本包提供了對網路原語的訪問,大部分使用者只需要Dial、Listen和Acc ...
  • 誤打誤撞,解決了很重要的入門級問題,簡要記錄下. "lispbox" 官網末尾說目前暫不相容 10.4 以上系統: TODO: Compile on Mac OS X 10.4, for compatability Make separate versions for common Linux di ...
  • 這篇博客是Java經典書籍《Effective Java(第二版)》的讀書筆記,此書共有78條關於編寫高質量Java代碼的建議,我會試著逐一對其進行更為通俗易懂地講解,故此篇博客的更新大約會持續1個月左右。 第1條:考慮用靜態工廠方法代替構造器 通常情況下我們會利用類的構造器對其進行實例化,這似乎毫 ...
  • 如果說一個人夠無聊的話。。。 就會做一些十分美(wei)麗(suo)的事情啦哈哈哈。。。 好的,話不多說,進入正題。 正如標題所示,我們今天的目標很簡單: 代碼要少,妹子要好。 步驟如下: 1. 首先我們得確定需要用到的庫: 就requests吧,我們首先嘗試向煎蛋(http://jiandan.n ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...