在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 常用數(shù)據(jù)類型
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測(cè)試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進(jìn)程、線程和協(xié)程
讀寫(xiě)二進(jìn)制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實(shí)例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡(jiǎn)介
Requests 庫(kù)的使用
讀寫(xiě)文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達(dá)式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進(jìn)程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級(jí)特性
線程
argparse
生成器
結(jié)束語(yǔ)
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

常用數(shù)據(jù)類型

在介紹 Python 的常用數(shù)據(jù)類型之前,我們先看看 Python 最基本的數(shù)據(jù)結(jié)構(gòu) - 序列(sequence)。

序列的一個(gè)特點(diǎn)就是根據(jù)索引(index,即元素的位置)來(lái)獲取序列中的元素,第一個(gè)索引是 0,第二個(gè)索引是 1,以此類推。

所有序列類型都可以進(jìn)行某些通用的操作,比如:

  • 索引(indexing)
  • 分片(sliceing)
  • 迭代(iteration)
  • 加(adding)
  • 乘(multiplying)

除了上面這些,我們還可以檢查某個(gè)元素是否屬于序列的成員,計(jì)算序列的長(zhǎng)度等等。

說(shuō)完序列,我們接下來(lái)看看 Python 中常用的數(shù)據(jù)類型,如下:

其中,列表、元組和字符串都屬于序列類型,它們可以進(jìn)行某些通用的操作,比如索引、分片等;字典屬于映射類型,每個(gè)元素由鍵(key)和值(value)構(gòu)成;集合是一種特殊的類型,它所包含的元素是不重復(fù)的。

通用的序列操作

索引

序列中的元素可以通過(guò)索引獲取,索引從 0 開(kāi)始??纯聪旅娴睦樱?/p>

>>> nums = [1, 2, 3, 4, 5]   # 列表
>>> nums[0]
1
>>> nums[1]
2
>>> nums[-1]                 # 索引 -1 表示最后一個(gè)元素
5
>>> s = 'abcdef'             # 字符串
>>> s[0]
'a'
>>> s[1]
'b'
>>>
>>> a = (1, 2, 3)            # 元組
>>> a[0]
1
>>> a[1]
2

注意到,-1 則代表序列的最后一個(gè)元素,-2 代表倒數(shù)第二個(gè)元素,以此類推。

分片

索引用于獲取序列中的單個(gè)元素,而分片則用于獲取序列的部分元素。分片操作需要提供兩個(gè)索引作為邊界,中間用冒號(hào)相隔,比如:

>>> numbers = [1, 2, 3, 4, 5, 6]
>>> numbers[0:2]                   # 列表分片
[1, 2]
>>> numbers[2:5]
[3, 4, 5]
>>> s = 'hello, world'             # 字符串分片
>>> s[0:5]
'hello'
>>> a = (2, 4, 6, 8, 10)           # 元組分片
>>> a[2:4]
(6, 8)

這里需要特別注意的是,分片有兩個(gè)索引,第 1 個(gè)索引的元素是包含在內(nèi)的,而第 2 個(gè)元素的索引則不包含在內(nèi),也就是說(shuō),numbers[2:5] 獲取的是 numbers[2], numbers[3], numbers[4],沒(méi)有包括 numbers[5]。

下面列舉使用分片的一些技巧。

  • 訪問(wèn)最后幾個(gè)元素

假設(shè)需要訪問(wèn)序列的最后 3 個(gè)元素,我們當(dāng)然可以像下面這樣做:

>>> numbers = [1, 2, 3, 4, 5, 6]
>>> numbers[3:6]
[4, 5, 6]

有沒(méi)有更簡(jiǎn)潔的方法呢?想到可以使用負(fù)數(shù)形式的索引,你可能會(huì)嘗試這樣做:

>>> numbers = [1, 2, 3, 4, 5, 6]
>>> numbers[-3:-1]      # 實(shí)際取出的是 numbers[-3], numbers[-2]
[4, 5]
>>> numbers[-3:0]       # 左邊索引的元素比右邊索引出現(xiàn)得晚,返回空序列
[]

上面的兩種使用方式并不能正確獲取序列的最后 3 個(gè)元素,Python 提供了一個(gè)捷徑:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8]
>>> numbers[-3:]
[6, 7, 8]
>>> numbers[5:]
[6, 7, 8]

也就是說(shuō),如果希望分片包含最后一個(gè)元素,可將第 2 個(gè)索引置為空。

如果要復(fù)制整個(gè)序列,可以將兩個(gè)索引都置為空

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8]
>>> nums = numbers[:]
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
  • 使用步長(zhǎng)

使用分片的時(shí)候,步長(zhǎng)默認(rèn)是 1,即逐個(gè)訪問(wèn),我們也可以自定義步長(zhǎng),比如:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8]
>>> numbers[0:4]
[1, 2, 3, 4]
>>> numbers[0:4:1]    # 步長(zhǎng)為 1,不寫(xiě)也可以,默認(rèn)為 1
[1, 2, 3, 4]
>>> numbers[0:4:2]    # 步長(zhǎng)為 2,取出 numbers[0], numbers[2]
[1, 3]
>>> numbers[::3]      # 等價(jià)于 numbers[0:8:3],取出索引為 0, 3, 6 的元素
[1, 4, 7]

另外,步長(zhǎng)也可以是負(fù)數(shù),表示從右到左取元素:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8]
>>> numbers[0:4:-1]
[]
>>> numbers[4:0:-1]       # 取出索引為 4, 3, 2, 1 的元素
[5, 4, 3, 2]
>>> numbers[4:0:-2]       # 取出索引為 4, 2 的元素
[5, 3]
>>> numbers[::-1]         # 從右到左取出所有元素
[8, 7, 6, 5, 4, 3, 2, 1]
>>> numbers[::-2]         # 取出索引為 7, 5, 3, 1 的元素
[8, 6, 4, 2]
>>> numbers[6::-2]        # 取出索引為 6, 4, 2, 0 的元素
[7, 5, 3, 1]
>>> numbers[:6:-2]        # 取出索引為 7 的元素
[8]

這里總結(jié)一下使用分片操作的一些方法,分片的使用形式是:

# 左索引:右索引:步長(zhǎng)
left_index:right_index:step

要牢牢記住的是:

  • 左邊索引的元素包括在結(jié)果之中,右邊索引的元素不包括在結(jié)果之中;
  • 當(dāng)使用一個(gè)負(fù)數(shù)作為步長(zhǎng)時(shí),必須讓左邊索引大于右邊索引;
  • 對(duì)正數(shù)步長(zhǎng),從左向右取元素;對(duì)負(fù)數(shù)步長(zhǎng),從右向左取元素;

序列可以進(jìn)行「加法」操作,如下:

>>> [1, 2, 3] + [4, 5, 6]     # 「加法」效果其實(shí)就是連接在一起
[1, 2, 3, 4, 5, 6]
>>> (1, 2, 3) + (4, 5, 6)
(1, 2, 3, 4, 5, 6)
>>> 'hello, ' + 'world!'
'hello, world!'
>>> [1, 2, 3] + 'abc'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

這里需要注意的是:兩種相同類型的序列才能「加法」操作。

序列可以進(jìn)行「乘法」操作,比如:

>>> 'abc' * 3
'abcabcabc'
>>> [0] * 3
[0, 0, 0]
>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

in

為了檢查一個(gè)值是否在序列中,可以使用 in 運(yùn)算符,比如:

>>> 'he' in 'hello'
True
>>> 'hl' in 'hello'
False
>>> 10 in [6, 8, 10]
True

參考資料

  • 《Python 基礎(chǔ)教程》
上一篇:閉包下一篇:hmac