1. 程式人生 > >python中的sequence(序列)

python中的sequence(序列)

資料型別:sequence (序列)

1. sequence(序列)是一組有順序元素集合

(嚴格的說,是物件的集合,但鑑於我們還沒有引入“物件”概念,暫時說元素)

序列可以包含一個或多個元素,也可以是一個沒有任何元素的空序列

元素可以是我們之前所說的基本資料型別,可以是另一個序列,還可以是我們以後介紹的其他物件。

序列有兩種:tuple(定值表; 也有翻譯為元組) 和 list ()

>>>s1 = (2, 1.3, 'love', 5.6, 9, 12, False) # s1是一個tuple

>>>s2 = [True, 5, 'smile']# s2是一個list

>>>print s1,type(s1)

>>>print s2,type(s2)

tuple和list的主要區別在於,一旦建立,tuple的各個元素不可再變更,而list的各個元素可以再變更

一個序列作為另一個序列的元素

>>>s3 = [1,[3,4,5]]

空序列

>>>s4 = []

2. 序列元素的引用:

序列元素的下標從0開始:

>>>print s1[0]

>>>print s2[2]

>>>print s3[1][2]

由於list的元素可變更,你可以對list的某個元素賦值:

>>>s2[1] = 3.0

>>>print s2

如果你對tuple做這樣的操作,會得到錯誤提示。

所以,可以看到,序列的引用通過s[<int>]實現, int為下標

3)其他的引用方式:

範圍引用: 基本樣式[下限:上限:步長]

>>>print s1[:5] # 從開始到下標4 (下標5的元素 不包括在內)

>>>print s1[2:]# 從下標2到最後

>>>print s1[0:5:2]# 從下標0到下標4 (下標5不包括在內),每隔2取一個元素 (下標為0,2,4的元素)

>>>print s1[2:0:-1]# 從下標2到下標1

從上面可以看到,在範圍引用的時候,如果寫明上限,那麼這個上限本身不包括在內

尾部元素引用

>>>print s1[-1]# 序列最後一個元素

>>>print s1[-3]# 序列倒數第三個元素

同樣,如果s1[0:-1], 那麼最後一個元素不會被引用 (再一次,不包括上限元素本身

4) 字串是一種tuple

因此也就可以做tuple可以進行的操作

>>>str = 'abcdef'

>>>print str[2:4]

總結:

tuple元素不可變,list元素可變

序列的引用 s[2], s[1:8:2]

字串是一種tuple

來測試一下python中的序列

  1. seq='hello world!'#這是一個tuple
  2. seq1=[1,1.3,True,'hello',[1,1.2,True,'xxx']]#list巢狀
  3. seq2=(1,1.3,True,'hello',[1,1.2,True,'xxx'])#tuple中巢狀list
  4. seq3=[1,1.3,True,'hello',(1,1.2,True,'xxx')]#list中巢狀tuple
  5. seq4=(1,1.3,True,'hello',(1,1.2,True,'xxx'))#tuple巢狀

1.python中的序列中竟然可以含有不同型別的元素,c++中的陣列、vector、list、deque、set、map的容器都做不到這一點。

2.python中的序列可以方便的取值

  1. ##有關取值操作符
  2. print("seq[2]=%s\nseq1[4]=%s\nseq2[4]=%s\nseq3[4]=%s\n"%(seq[2],seq1[4],seq2[4],seq3[4]))  
  3. ##seq[m,n]輸出的只有m到n-1。相當於是個半開半閉區間
  4. print("seq[2:4]=%s\nseq1[2:4]=%s\nseq2[2:4]=%s\nseq3[2:4]=%s\n"%(seq[2:4],seq1[2:4],seq2[2:4],seq3[2:4]))  

輸出:

>>> ================================ RESTART ================================
>>> 
seq[2]=l
seq1[4]=[1, 1.2, True, 'xxx']
seq2[4]=[1, 1.2, True, 'xxx']
seq3[4]=(1, 1.2, True, 'xxx')


seq[2:4]=ll
seq1[2:4]=[True, 'hello']
seq2[2:4]=(True, 'hello')
seq3[2:4]=[True, 'hello']

3.tuple和list的主要區別在於,一旦建立,tuple的各個元素不可再變更,而list的各個元素可以再變更。

  1. #seq算是一個tuple。如果要修改裡面的元素值,例如seq[2]='x'
  2. ''''' 
  3. 很悲慘的出現下面的錯誤 
  4. Traceback (most recent call last): 
  5.   File "J:\pythonexercise\seq.py", line 15, in <module> 
  6.     seq[2]='x' 
  7. TypeError: 'str' object does not support item assignment 
  8. '''
  9. #seq1算是一個list。元素是可以修改的
  10. seq1[0]='I can change the cell in list'
  11. seq1[4]='change list to string'
  12. print seq1  
  13. 輸出為  
  14. ['I can change the cell in list'1.3True'hello''change list to string']  
  15. #seq2是一個tuple,所以它不能被修改
  16. #seq2[0]='I can change the cell in list'
  17. ''''' 
  18. 很悲慘的出現下面的錯誤 
  19. Traceback (most recent call last): 
  20.   File "J:\pythonexercise\seq.py", line 33, in <module> 
  21.     seq2[0]='I can change the cell in list' 
  22. TypeError: 'tuple' object does not support item assignment 
  23. '''
  24. ##但是下面這句話竟然執行成功了。seq2[4]是一個list。所以seq2[4]中的元素可以被修改。
  25. ##這就比較蛋疼了,tuple不能被修改,但是tuple中巢狀的list可以被修改。⊙﹏⊙b汗!
  26. seq2[4][2]='change list to string'
  27. print seq2  

4.tuple也不是那麼不可變

>>> t1=(1,'zzzz')
>>> t2=[1,'zzzaaa']
>>> t1=t1+(1.23,True,[0,1])
>>> t1
(1, 'zzzz', 1.23, True, [0, 1])
>>> t1=t1+t2


Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    t1=t1+t2
TypeError: can only concatenate tuple (not "list") to tuple
>>> t2=t2+[1.23,True,[0,1]]
>>> t2
[1, 'zzzaaa', 1.23, True, [0, 1]]
>>> 

可以看到,list和tuple不能連線。tuple在連線操作後值變化了

>>> t1=(1,'zzzz')
>>> t1=t1*2
>>> t1
(1, 'zzzz', 1, 'zzzz')

對於*重複操作符也可以修改tuple的值。

相關推薦

pythonsequence序列

資料型別:sequence (序列)1. sequence(序列)是一組有順序的元素的集合(嚴格的說,是物件的集合,但鑑於我們還沒有引入“物件”概念,暫時說元素)序列可以包含一個或多個元素,也可以是一個沒有任何元素的空序列元素可以是我們之前所說的基本資料型別,可以是另一個序列

Pythonpackage的調用方式

inf none 普通 bfd 是否 open usr -a pack                      Python中包(package)的調用方式                                           作者:尹正傑 版權聲明:原創

pythonlist列表、元組和array的區別-分別什麼時候使用?

list是列表,list中的元素的資料型別可以不一樣。array是陣列,陣列中的元素的資料型別必須一樣 Python中的列表(list)類似於C#中的可變陣列(ArrayList),用於順序儲存結構。它可以方便、高效的的新增刪除元素,並且列表中的元素可以是多種型別。列表很多操作都跟元組一

python zip*iterables函式的使用

1.zip()函式的定義 從引數中的多個迭代器取元素組合一個新的迭代器 返回:一個zip物件,其內部元素為元組,可以轉化為列表或者元組 傳入引數:元組、列表、字典等迭代器 2.zip()函式的使用 僅僅有一個引數時,從迭代器中依次取一個元組,組成元組。>>

python字串str的操作

s = 'hello' # 字串的重疊 s = 'hello' * 2 # 字串的拼接 s = 'hello' + 'world' print(s) # 統計字元個數 print(len(s)) # 提取單個字元,通過下表提取 # 從開頭提取,下表從0開始 print(s[

Python基礎入門序列

#序列是以[]的一個序列,每一個元素分配一個序號,也就是索引 #可變序列list 不可變序列tuple 字串string # x變數 1和1.0是儲存物件 動態資料型別的特徵 x = 1 print(type(x),id(x)) x = 1.0 prin

Oracle sequences序列介紹

Oracle提供了sequence物件,由系統提供自增長的序列號,用於生成資料庫資料記錄的自增長主鍵或序號的地方。如果當前的序列不存在,它會建立一個序列,如果存在,它首先要得到當前序列的最大值,然後再加一,實現自增長的功能。 建立序列命令CREATE SEQUENCE [u

opencv-python boundingRectcnt以及cv2.rectangle用法

矩形邊框(Bounding Rectangle)是說,用一個最小的矩形,把找到的形狀包起來。還有一個帶旋轉的矩形,面積會更小,效果見下圖 上程式碼 首先介紹下cv2.boundingRect(img)這個函式 這個函式很簡單,img是一個二值圖,也就是它的引數;

對於Python切片slice的理解

def split(self, sep=None, maxsplit=-1): # real signature unknown; restored from __doc__ """ S.split(sep=None, maxsplit=-1) -> l

Python切片Slicing的運用:運算子

總結: 1,對切片賦值,相當於替代原list中的切片部分,賦值的list不必與切片長度一致,也可以將切片賦值給新的變數,用以取原list中的一部分; 2,list中的元素在切片中可以用正數索引或負數索引表示,正向索引為0,1,2……,第一個元素索引為0;負向索引-1,-2,

python list列表,tupe(元組),str字串,dict(字典)之間的相互轉換

1、字典(dict)dict = {‘name’: ‘Zara’, ‘age’: 7, ‘class’: ‘First’}1.1 字典——字串返回:print type(str(dict)), str(dict)11.2 字典——元組返回:(‘age’, ‘name’, ‘c

python列表list的基本操作

列表 建立和訪問列表 bicycle = ['trek', 'cannondale', 'redline','specialized'] print bicycle print bicycl

python如何用序列list()轉化為矩陣int()

今天練習寫python程式碼時,遇到一個有趣的寫法: def relu_fun(x): x[x<0]=0 return x 結合上下文發現x是矩陣,猜測函式功能是根據x的值若小於0,則對應位的x就置為0,否則直接返回原來x的值。

Python進階3_進程與線程的lock互斥鎖、遞歸鎖、信號量

fun 我們 bsp 控制 支持 發生 class 線程 數據操作 1、同步鎖 (Lock) 當各個線程需要訪問一個公共資源時,會出現數據紊亂 例如: 1 import threading,time 2 def sub(): 3 global num

pythonenumerate的用法

bsp pos 元素 變量 lis 遍歷序列 rate too st3 先出一個題目:1.有一 list= [1, 2, 3, 4, 5, 6] 請打印輸出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印輸出, 2.將 list 倒序成 [6, 5, 4

少說話多寫程式碼之Python學習024——條件語句01Python的布林值

大家都知道條件語句,無非就是判定布林值的真假來做分支。那麼我們看看Python中的布林值, Python中標註的布林值為True和False,我們通過程式碼來看看, a =True print(a) b=False print(b) true = True==1 print(true)

python學習筆記——2pandas的資料型別

    在用python進行資料處理的時候,自帶的五種資料型別使用起來顯然是有侷限性的,python之強大在於各種包,在資料處理中用的最多的就是pandas和numpy。本文章主要介紹pandas的資料結構。     pandas有兩種資料結構  

python星號*的用法

這裡不說乘法,大家都知道 先看幾個測試語句: import numpy as np a=np.random.rand(2) print(a) print(*a) 輸出結果: [0.95721482 0.55708755] 0.9572148191916312 0.5570875

Python學習筆記4——Matplotlib的annotate註解的用法

在上一篇博文ID3決策樹演算法中,繪製決策樹時,使用了Matplotlib的註解工具annotate,藉此機會系統學習一下annotate的用法。 annotate用於在圖形上給資料新增文字註解,而且

python反射__import__和getattr使用

反射: 1、可通過字串的形式匯入模組   1.1、單層匯入  __import__('模組名') View Code