python 列表與元組的操作簡介

上一篇:Python 序列通用操作介紹

列表

列表是可變的(mutable)——可以改變列表的內容,這不同于字符串和元組,字符串和元組都是不可變的。接下來討論一下列表所提供的方法。

list函數

可以使用list函數來創建列表:

list('Hello')
['H', 'e', 'l', 'l', 'o']

列表的基本操作

在Python 序列通用操作介紹中提及的操作全部適用于列表,例如索引、分片、連接、乘法等。而且由于列表是可以修改的,所以多了一些元素賦值、元素刪除、分片賦值的方法。

改變列表元素的值

>>> 
>>> a=list('ooooo')
>>> a[2]='A'
>>> a
['o', 'o', 'A', 'o', 'o']
>>> 

刪除列表元素

使用del對列表元素進行刪除:

>>> a
['o', 'o', 'A', 'o', 'o']
>>> del a[2]
>>> a
['o', 'o', 'o', 'o']
>>> len(a)
4

刪除之后,列表的長度也變成了4.關于del語句的使用后續介紹。

分片賦值

使用分片賦值可以同時改變一個范圍內的字符:

>>> 
>>> str1= list('abcdef')
>>> str1
['a', 'b', 'c', 'd', 'e', 'f']
>>> str1[3:]=list('abc')
>>> str1
['a', 'b', 'c', 'a', 'b', 'c']
>>> 

不止如此,分片賦值更強大的功能是使用長度不等的序列替換分片:


#長序列替換短分片
>>> str2=list('ppp')
>>> str2
['p', 'p', 'p']
>>> str2[1:]=('ython')
>>> str2
['p', 'y', 't', 'h', 'o', 'n']
>>> 
>>>#短序列替換長分片 
>>> str2= list('abcdefg')
>>> str2
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> str2[1:]= list('bc')
>>> str2
['a', 'b', 'c']
>>> 

利用分片操作,我們可以實現序列的插入操作---插入不過是替換掉某段“空”分片:

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

列表方法

方法與函數關系密切。方法本身就是函數,只不過這函數是和對象結合在一起的,通過對象來調用方法。面向對象語言中這些方法可稱為接口。方法調用的語法為:

對象.方法(參數)

接下來我們就來看看列表這種類型的對象提供了什么方法(接口)。

append

功能:用于在列表末尾追加新的元素

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

count

功能:用于統計某個元素在列表中出現的次數

>>> [1,2,3,4,5,2,3,1,2,3,42,1,2,3,5].count(1)
3
>>> 

extend

功能:在列表末尾一次性追加另一個序列中的多個值

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

index

功能:用于從列表中找出某個值第一個匹配項的索引位置

>>> a=['Me','and','my','broken']
>>> a.index('my')
2
>>> 

insert

功能:用于將對象插入到列表中對應位置

>>> 
>>> number=[1,2,3,4,5]
>>> number.insert(3,'hello')
>>> number
[1, 2, 3, 'hello', 4, 5]
>>> number.insert(3,6)
>>> number
[1, 2, 3, 6, 'hello', 4, 5]
>>> 

pop

功能:該方法從列表中彈出一個元素,默認是最后一個。并且返回彈出的元素

>>> 
>>> number=[1,2,3,4,5,6,7,8]
>>> a = number.pop()
>>> a
8
>>> number
[1, 2, 3, 4, 5, 6, 7]
>>> 

利用append(從末尾添加一個元素)方法,我們可以來實現一種常見的數據結構--棧。

當然,POP方法可以從序列中彈出任意位置的元素:

>>> 
>>> number
[1, 2, 3, 4, 5, 6, 7]
>>> number.pop(3)
4
>>> number
[1, 2, 3, 5, 6, 7]
>>> 

remove

功能:從列表中移除某個值的第一個匹配項。與pop不同的是,該方法并不返回移除的元素。

>>> str4 = list('hello')
>>> str4
['h', 'e', 'l', 'l', 'o']
>>> str4.remove('l')
>>> str4
['h', 'e', 'l', 'o']
>>> 

reverse

功能:該方法對序列方向存放

>>> 
>>> number
[1, 2, 3, 5, 6, 7]
>>> number.reverse()
>>> number
[7, 6, 5, 3, 2, 1]
>>> 

注意該方法改變了列表但是沒有返回值。

如果需要對一個序列進行反向迭代,可以使用reversed函數。這個函數并不返回一個列表,而是返回一個迭代器對象,可以使用list把迭代器對象轉換成列表:

>>> 
>>> number
[7, 6, 5, 3, 2, 1]
>>> number = list(reversed(number))
>>> number
[1, 2, 3, 5, 6, 7]
>>> 

sort

功能:用于在原位置度列表進行排序。 在原位置意味著列表會被修改。

>>> number
[1, 4, 3, 7, 4, 8, 3, 2, 7, 9]
>>> number.sort()
>>> number
[1, 2, 3, 3, 4, 4, 7, 7, 8, 9]
>>> 

應注意的是,sort()方法的返回值并不是序列本身,而是None。

如何保存原序列順序而進行排序?

  • 方法一
>>> 
>>> x = [3,5,7,3,1,2,4]
>>> y =x[:]
>>> y.sort()
>>> x
[3, 5, 7, 3, 1, 2, 4]
>>> y
[1, 2, 3, 3, 4, 5, 7]
>>> 

注意將列表x賦值給列表y時千萬別使用直接賦值,否則y與x指向了相同的對象,對y的修改即是對x的修改:

>>> 
>>> x
[3, 5, 7, 3, 1, 2, 4]
>>> y=x
>>> y.sort()
>>> x
[1, 2, 3, 3, 4, 5, 7]
>>> y
[1, 2, 3, 3, 4, 5, 7]
>>> 
  • 方法二

當然,你也可以使用函數來進行排序。

函數:sorted().

功能:對任何序列進行排序,結果返回一個排好序的列表

>>> 
>>> x=[3,5,2,1,7,4,8,9,3]
>>> y=sorted(x)
>>> x
[3, 5, 2, 1, 7, 4, 8, 9, 3]
>>> y
[1, 2, 3, 3, 4, 5, 7, 8, 9]
>>> 

如何修改排序規則?

從上面的例子我們看到,sort方法的默認排序都是升序的。sort方法有兩個可選的參數,可以通過它來修改排序規則:

  • key

key參數提供一個在排序過程中使用的函數,利用該函數來為列表中元素創造一個鍵(key),依據鍵來對列表元素(值)進行排序。

>>> 
>>> str5= ['one','year','like','any','old','other','year']
>>> #默認的排序依據字符串排序規則
>>> str5.sort()
>>> str5
['any', 'like', 'old', 'one', 'other', 'year', 'year']
>>> #使用key參數來修改排序規則
>>> #我們使用字符長度作為鍵來排序
>>> str5.sort(key=len)
>>> str5
['any', 'old', 'one', 'like', 'year', 'year', 'other']
>>> 
  • reverse

另一個參數reverse是個簡單的bool值,用來指明是否要反向排序;

>>> 
>>> num=[2,3,4,5,6,78,4,3,3,4,5,8,9]
>>> num.sort()
>>> num
[2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 8, 9, 78]
>>> num.sort(reverse=True)
>>> num
[78, 9, 8, 6, 5, 5, 4, 4, 4, 3, 3, 3, 2]

借助參數key,我們可以定義自己的比較函數來自定義比較規則。函數的定義在后面進行介紹。

元組

元組與列表的區別就在于,元組是一種不可變序列。元組變量的賦值要在定義時就進行,這就像C語言中的const變量或是C++的引用,定義時賦值之后就不允許有修改。元組存在的意義是:

  • 元組在映射中可以作為鍵使用,因為要保證鍵的不變性。
  • 元組作為很多內置函數和方法的返回值存在。

tuple()函數

類比于列表的list()函數,元組有tuple()函數來返回元組。

>>> 
>>> tul1= tuple('abcdef')
>>> tul1
('a', 'b', 'c', 'd', 'e', 'f')
>>> 

元組語法

從tuple返回的元組我們看到,元組的語法是用圓括號(大部分時候是)括起來的、用逗號加以分隔的元素的集合。逗號在元組構成中十分重要:

>>> 
>>> #這是一個數學數
>>> (1)
1
>>> #這是一個元組
>>> (1,)
(1,)
>>> 

一個更加明顯的例子:

>>> 
>>> a = 10*(1)
>>> b = 10*(1,)
>>> a
10
>>> b
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
>>> 

了解了逗號在元組構成的重要性后,我們來看如何定義各種元組

定義元組

定義空元組

>>> 
>>> tul1=()
>>> tul1
()
>>> 

定義只有一個元素的元組

>>> 
>>> tul2=(1,)
>>> tul2
(1,)
>>> 

定義多個元素構成的元組類似于定義一個元素的元組,也可以使用tuple函數把其他序列轉換為元組:

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

元組操作

因為元組不可修改,與列表比較少了很多操作,比如attend、insert 等。而其他操作例如分片、索引操作等都類似于列表。故在使用元組時,時刻記住元組不可修改,自然就知道元組有哪些操作了。

多謝看完文章,如所記有差錯懇請指出。

轉載于:https://www.cnblogs.com/QG-whz/p/4782809.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397541.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mfc嵌入matlab繪圖窗口,將matlab的圖嵌入MFC

【實例簡介】VS調用matlab畫圖模塊編譯成的動態鏈接庫,并在MFC顯示。【實例截圖】【核心代碼】3b0582a3-4ea8-4a61-ba33-e448be563b88└── 將matlab的圖嵌入MFC├── matlab_2010b與VS2008_混合編程的實現.pdf├── TestWithData│ ├── Debug│ │ ├─…

python multiprocessing 和tcp

#用類方法 服務端from socket import *from multiprocessing import Processimport osclass Myprocess(Process): def __init__(self, conn): self.conn conn super().__init__() def run(self): conn self.conn start True whil…

matlab 畫三維花瓶,精美花瓶建模教程

1、首先,草圖單位為mm,進入前視圖繪制如圖草圖,花瓶的基本形狀輪廓2、然后對草圖進行旋轉3、旋轉出曲面后,在頂部邊線新建一個基準面4、繼續在前視圖繪制草圖,如圖繪制一弧線5、然后進行旋轉6、可以得到圖示的兩個曲面…

PKI系統相關知識點介紹

公鑰基礎設施(Public Key Infrastructure,簡稱PKI)是目前網絡安全建設的基礎與核心,是電子商務安全實施的基本保障,因此,對PKI技術的研究和開發成為目前信息安全領域的熱點。本文對PKI技術進行了全面的分析…

android 打印java堆棧,Android打印堆棧

java打印堆棧方法一:異常對象打印堆棧Exception e new Exception("this is a log");e.printStackTrace();方法二:Log打印獲取異常的堆棧并打印Log.e(“dump_test”,Log.getStackTraceString(new Throwable()));C\C打印堆棧方法一:…

實際算法項目工程上手日志C/C++

#pragma once 為了保證頭文件只被編譯一次,通常放在頭文件的頂部 #define IN #define OUT #define INOUT 這個只在邏輯上起作用, IN 表示輸入參數,指針指向的值不會修改; OUT 表示輸出參數,指針指向的值會修改&a…

Arduino 控制超聲波測距模塊

一.實物圖 二.例子代碼 用到數字2 和3 引腳,還有兩個就是vcc GND兩個陰腳,用模塊連線比較簡單 轉載于:https://www.cnblogs.com/caoguo/p/4785700.html

Linux安裝source-code-pro字體

2019獨角獸企業重金招聘Python工程師標準>>> 1.下載source-code-pro字體 從GitHub下載 https://github.com/adobe-fonts/source-code-pro/releases 2.解壓文件,將OTF格式的文件夾重新命名一下,這里我命名為source-code-pro,然后將…

dft對稱性 matlab實驗,數字信號處理實驗指導書(審)

(0???2?)上對X(ej?)均勻采樣得到?X(k)?X(ej?)??2?k/N??n???x(n)e?j2?kn/N 0?k?N?1可以看到X(k)也是頻域上的有限長序列,長度為N。序列X(k)稱為序列x(n)的N點DFT。N稱為DFT變換區間長度。 通常表示WN?e?j2?/N可將定義式表示為?X(k)??x(n)…

PI

并不是所有東西都可以套PI的,只有滿足上述這類的數學關系才可以。 轉速經過PI調節得到電流也是有原因的。從下圖中可以發現,轉速 k*Iq/s,s是拉普拉斯算子,所以也是滿足積分,比例關系的。 轉載于:https://www.cnblogs.…

AOP之AspectJ簡單使用

為什么80%的碼農都做不了架構師?>>> 參考文章: 使用AspectJ在Android中實現Aop 深入理解Android之AOP自動打印日志主要知識點: 主要是JPoint、pointcuts、advice以及他們之間的關系可以通過aj文件、或AspectJ注解的Java文件實現A…

matlab drawnow連成曲線,precision recall曲線Matlab實現

在用哈希進行檢索時,常會用到precision recall曲線對其性能進行定量評價。precision recall的定義在信息檢索評價指標中已做了詳細說明,這里再記錄一下precision recall的具體實現。precision recall曲線matlab一般使用的都是下面的版本:func…

trap

http://blog.csdn.net/elbort/article/details/8525599 http://mywiki.wooledge.org/SignalTrap轉載于:https://www.cnblogs.com/flowjacky/p/4785723.html

WinSCP實現Ubuntu與 Windows 文件共享方法

2019獨角獸企業重金招聘Python工程師標準>>> WinSCP是一個Windows環境下使用SSH的開源圖形化SFTP客戶端。同時支持SCP協議。它的主要功能就是在本地與遠程計算機間安全的復制文件。WinSCP綠色中文版 一款基于SSH安全高效的FTP上傳軟件。WinSCP 可以執行所有基本的文…

緩存機制

緩存 緩存就是數據交換的緩沖區(稱作Cache) 客戶端:緩存(expires)、deflate壓縮 緩存服務器:CDN/cache緩存靜態內容如:html、jpg、gif、js等 靜態web服務器:Apache/nginx靜態服務器提…

Shell學習總結

Shell 是什么? Shell 是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設計語言。 Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務…

java有幾個關鍵字,Java多線程常用的幾個關鍵字

Java多線程常用的幾個關鍵字二、volatile作用:volatile關鍵字的作用是:使變量在多個線程間可見(具有可見性),但是僅靠volatile是不能保證線程的安全性,volatile關鍵字不具備synchronized關鍵字的原子性。Demo1:package com.ietree…

PHP獲取QQ等級,php仿QQ等級太陽顯示函數

開頭先引述下QQ等級的算法:設當前等級為N,達到當前等級最少需要的活躍天數為D,當前活躍天數為Dc,升級剩余天數為Dr,則:從而推出:好了,引述完成,懶得寫字了,貼出代碼&…

Bugfree實用心得_轉

轉自:http://blog.csdn.net/benkaoya/article/details/8719257 本博下有許多實用技巧 1. 什么是問題跟蹤系統 問題跟蹤系統(Issue Tracking System)是專門用于記錄、跟蹤和管理各類問題的軟件。 問題跟蹤系統出現于上世紀80年代,…

【qxbt day1】 P2367 語文成績

今天學了 差分********* 很明白 然后 配合著luogu上的題寫一下吧 裸的差分 當時一直打暴力60分 交了十幾次 今天才知道 查詢修改什么的是差分 直接看題把 輸入輸出格式輸入格式: 第一行有兩個整數n,p,代表學生數與增加分數的次…