日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python中的序列操作

發(fā)布時間:2023/12/10 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中的序列操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python中的序列操作

分類: python

undefined

官方手冊:https://docs.python.org/3.7/library/stdtypes.html#sequence-types-list-tuple-range

序列簡介

序列是指按照位置順序來存儲數據的數據結構,也就是說能通過數值索引進行操作。實際上,python對序列的解釋是:只要類型對象中重載了__len__()和__getitem__(),且它們的整數參數從0開始,就表示這個類型滿足序列協議,是一個序列類型。

python有三種基本的序列類型列表、元組和range對象。當然,還有特別定制的序列類型:str和binary data

序列類型又分為可變序列和不可變序列。可變序列表示可以原處修改的序列,不可變序列意味著不允許原處修改。例如,列表是可變序列,字符串是不可變序列。

可變對象和不可變對象的含義,參見python可變對象和不可變對象的解釋。

序列的通用操作

下面這些操作是序列通用的,無論是可變、不可變序列。但通用并不意味著所有序列都支持這些操作,有些特殊的序列因為某些原因不支持某些操作也是合理的。

注意:python中序列操作在索引越界的時候都會報錯。

1.測試元素是否存在

x in S和x not in S,返回True或False。例如:

>>> 'a' in "abcd" True >>> 'aa' in "abcd" False >>> 'ab' in "abcd" True >>> 3 in [1,2,3,4] True

2.加法和乘法符號

S1 + S2或S * N或N * S,其中S1和S2是同一種序列類型,N表示序列的重復次數。

例如:

>>> [1,2] + [3,4] [1, 2, 3, 4]>>> [1,2] * 3 [1, 2, 1, 2, 1, 2] >>> 3 * [1, 2] [1, 2, 1, 2, 1, 2]

注意,序列中保存的是元素的引用地址,所以對于序列中的可變元素,+ *時需要注意修改的影響范圍:

>>> L = [1,2,3,4] >>> L1 = [['a'],['b']]>>> L0 = L + L1 >>> L0 [1, 2, 3, 4, ['a'], ['b']]>>> L1[0][0] = "aa" >>> L0 [1, 2, 3, 4, ['aa'], ['b']]

上面修改"a"為"aa"也會影響到+的結果L0,因為['a']是一個可變對象。同樣對于*的重復操作,也是拷貝引用:

>>> L = [] >>> L1 = [L] * 3 >>> L1 [[], [], []]>>> L.append(3) >>> L1 [[3], [3], [3]]

3.len()、max()和min()函數

len()返回序列的元素個數,也就是序列的長度。min()和max()分別返回序列中最小、最大的元素。

>>> len(L), min(L), max(L) (4, 'a', 'd')

4.找出元素在序列中出現的次數count()

>>> s="hello world" >>> s.count("h"),s.count("o") (1, 2)

5.索引取元素

S[i],i為從0開始的數值,可以取負數表示從尾部開始取。

例如:

>>> L ['a', 'b', 'c', 'd'] >>> L[0] 'a' >>> L[1] 'b' >>> L[-1] 'd'

負數的i等價于len(S)+i作為索引。例如,len(S) = 3, i = -1,表示取最后一個元素,也就是index=2的元素。

6.分片

分片操作用于從序列中取出子序列,它會創(chuàng)建新的內存塊來保存取出來的序列對象

  • S[i:j]:從索引位i取到索引位j,不包括j
  • S[i:]:從索引位i開始取到最結尾
  • S[:j]:從最開頭取到索引位j,不包括j
  • S[:]:從頭取到尾,相當于拷貝了序列,但得到的是新序列
  • S[i:j:k]:k表示取元素時的步進間隔,默認為1,表示每個元素都取,如果為2,則表示取一個跳過一個

分片的區(qū)間是左閉右開的,所以不會包括j的索引位。i和j可以是負數,負數表示從尾部開始計算索引位。例如,-1表示最后一個元素,-2表示倒數第二個元素。

特別地,如果i = j,則表示找到序列中的這個位置,但因為切片長度位0,所以返回空。

例如:

>>> s = "hello world" >>> len(s) 11>>> s[0:6] 'hello ' >>> s[:6] 'hello '>>> s[6:10] # 不包括index=10 'worl' >>> s[6:11] # 所以用大于10的結束位 'world' >>> s[6:] 'world' >>> s[6:-1] 'worl'>>> s[:] # 拷貝序列得到副本 'hello world'>>> s[::1] # 步進為1,默認的 'hello world' >>> s[::2] # 每次跳過一個元素 'hlowrd'>>> s[1:1] # 找到index=1的位置 ''

7.找出第一個元素的位置index()

index(x,i,j)表示從序列中搜索元素x并返回第一次出現的x的位置,如果給定了i,則表示從索引位i開始搜索,給定了j則表示最多搜索到索引位為j的位置。

如果找不到元素,將報錯。i和j可以是負數,但無論它們是正數還是負數,都是搜索的開始和結束位。

>>> s="hello world" >>> s.index("o") 4 >>> s.index("o",1,-1) 4 >>> s.index("o",-5) # 從倒數第5個元素開始搜索 7 >>> s.index("a") # 搜索不到時報錯 Traceback (most recent call last):File "<stdin>", line 1, in <module> ValueError: substring not found

不可變序列的操作

相比可變序列,不可變序列的唯一操作是可以支持內置的hash()操作。可變序列無法hash()。

>>> hash("asd") -2014632507>>> hash((1,23)) 1320437575>>> hash([1,23]) Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'

能夠hash的不可變序列,意味著能作為dict的key,能保存到set或frozenset中。

可變序列的操作

  • s[i] = x、s[i:j] = t將序列中的元素替換成x或可迭代對象t
  • s[i:j:K] = t將序列中的元素替換成可迭代對象t,t的長度必須和s[i:j:k]的長度一樣
  • del s[i]、del s[i:j]刪除序列中的元素,等價于s[i] = []、s[i:j] = []
  • del s[i:j:k]刪除序列中的某些元素,k為步進值
  • s.remove(x):移除第一次出現的元素x
  • s.clear()表示清空序列中的所有元素,等價于del s[:]
  • s.pop([i])表示移除序列s中的第i個元素并返回這個元素,中括號表示可選,如果沒有參數,默認移除最后一個元素
  • s.append(x)向序列的尾部追加元素x,等價于s[len(s):len(s)] = [x]
  • s.extend(t)或s += t表示將t擴展到序列s的尾部,等價于s[len(s):len(s)] = t
  • s.insert(i,x)表示將x插入到序列中的i索引位置處,等價于s[i:i] = [x]
  • s *= n表示將序列n的元素重復n次追加到s的尾部
  • s.copy()表示拷貝序列得到一個新的序列副本,等價于s[:]
  • s.reverse()原地反轉序列s,為了節(jié)約內存空間,所以是原地反轉,不會返回反轉后的序列
  • 對于序列,還有一個內置函數reversed(SEQ)。與之對應的,還有一個內置函數sorted(),但它操作的對象是可迭代對象,并不一定總是序列。

    示例1:序列元素賦值

    >>> L = ['aa','bb','cc','dd','ee','ff'] >>> L1 = [1,2,3,4]>>> L[0] = "a" >>> L ['a', 'bb', 'cc', 'dd', 'ee', 'ff']>>> L[1:2] = L1 >>> L ['a', 1, 2, 3, 4, 'cc', 'dd', 'ee', 'ff']>>> L[::2] = [1,2,3,4,5] >>> L [1, 1, 2, 3, 3, 'cc', 4, 'ee', 5]

    示例2:刪除元素

    刪除相關操作有del、remove()、pop()、clear()。

    例如:

    >>> L = ['aa','bb','cc','dd','ee','ff'] >>> del L[1] >>> L ['aa', 'cc', 'dd', 'ee', 'ff'] >>> del L[1:2] >>> L ['aa', 'dd', 'ee', 'ff'] >>> del L[::2] >>> L ['dd', 'ff']>>> L = ['aa','bb','cc','dd','ee','ff'] >>> L.remove('aa') >>> L ['bb', 'cc', 'dd', 'ee', 'ff']>>> L.pop() 'ff' >>> L ['bb', 'cc', 'dd', 'ee']>>> L.pop(2) 'dd' >>> L ['bb', 'cc', 'ee']>>> L.clear() >>> L []

    示例3:添加元素

    相關操作有append()、extend()、insert()、s *= n。

    例如:

    >>> L = ['aa', 'bb', 'cc', 'dd', 'ee'] >>> L1 = [1,2,3,4]>>> L.append("ff") >>> L ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']>>> L.insert(1,"a") >>> L ['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff']>>> L.extend(L1) >>> L ['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff', 1, 2, 3, 4]>>> L1 * 2 [1, 2, 3, 4, 1, 2, 3, 4]

    示例4:其它操作

    拷貝序列copy()、反轉序列reverse()。

    >>> L = ['aa', 'bb', 'cc', 'dd', 'ee']>>> L1 = L.copy() >>> L1 ['aa', 'bb', 'cc', 'dd', 'ee']>>> L.reverse() >>> L ['ee', 'dd', 'cc', 'bb', 'aa']

    還有一個可用于序列的內置函數reversed(),它反轉序列,并返回可迭代對象。所以,如果要將它展現出來,需要構建容器。例如:

    >>> L = ['aa', 'bb', 'cc', 'dd', 'ee']>>> list(reversed(L)) ['ee', 'dd', 'cc', 'bb', 'aa']>>> set(reversed(L)) {'aa', 'bb', 'ee', 'cc', 'dd'}

    總結

    以上是生活随笔為你收集整理的Python中的序列操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。