日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

列表的更多特性

列表數(shù)據(jù)類型還有很多的方法。這里是列表對(duì)象方法的清單:

list.Append(x)

在列表的末尾添加一個(gè)元素。相當(dāng)于 a[len(a):] = [x] 。

list.extend(iterable)

使用可迭代對(duì)象中的所有元素來(lái)擴(kuò)展列表。相當(dāng)于 a[len(a):] = iterable 。

list.insert(ix)

在給定的位置插入一個(gè)元素。第一個(gè)參數(shù)是要插入的元素的索引,所以 a.insert(0, x) 插入列表頭部, a.insert(len(a), x) 等同于 a.append(x) 。

list.remove(x)

移除列表中第一個(gè)值為 x 的元素。如果沒有這樣的元素,則拋出 ValueError 異常。

list.pop([i])

刪除列表中給定位置的元素并返回它。如果沒有給定位置,a.pop() 將會(huì)刪除并返回列表中的最后一個(gè)元素。( 方法簽名中 i 兩邊的方括號(hào)表示這個(gè)參數(shù)是可選的,而不是要你輸入方括號(hào)。你會(huì)在 Python 參考庫(kù)中經(jīng)??吹竭@種表示方法)。

list.clear()

刪除列表中所有的元素。相當(dāng)于 del a[:] 。

list.index(x[, start[, end]])

返回列表中第一個(gè)值為 x 的元素的從零開始的索引。如果沒有這樣的元素將會(huì)拋出 ValueError 異常。

可選參數(shù) start 和 end 是切片符號(hào),用于將搜索限制為列表的特定子序列。返回的索引是相對(duì)于整個(gè)序列的開始計(jì)算的,而不是 start 參數(shù)。

list.count(x)

返回元素 x 在列表中出現(xiàn)的次數(shù)。

list.sort(key=Nonereverse=False)

對(duì)列表中的元素進(jìn)行排序(參數(shù)可用于自定義排序,解釋請(qǐng)參見 sorted())。

list.reverse()

反轉(zhuǎn)列表中的元素。

list.copy()

返回列表的一個(gè)淺拷貝。相當(dāng)于 a[:] 。

列表方法示例:

>>>

>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple')
2
>>> fruits.count('tangerine')
0
>>> fruits.index('banana')
3
>>> fruits.index('banana', 4) # Find next banana starting a position 4
6
>>> fruits.reverse()
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape')
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
>>> fruits.pop()
'pear'

你可能已經(jīng)注意到,像 insert ,remove 或者 sort 方法,只修改列表,沒有打印出返回值——它們返回默認(rèn)值 None 。1 這是Python中所有可變數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)原則。

列表作為棧使用

列表方法使得列表作為堆棧非常容易,最后一個(gè)插入,最先取出(“后進(jìn)先出”)。要添加一個(gè)元素到堆棧的頂端,使用 append() 。要從堆棧頂部取出一個(gè)元素,使用 pop() ,不用指定索引。例如

>>>

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

列表作為隊(duì)列使用

列表也可以用作隊(duì)列,其中先添加的元素被最先取出 (“先進(jìn)先出”);然而列表用作這個(gè)目的相當(dāng)?shù)托?。因?yàn)樵诹斜淼哪┪蔡砑雍蛷棾鲈胤浅??,但是在列表的開頭插入或彈出元素卻很慢 (因?yàn)樗械钠渌囟急仨氁苿?dòng)一位)。

若要實(shí)現(xiàn)一個(gè)隊(duì)列, collections.deque 被設(shè)計(jì)用于快速地從兩端操作。例如

>>>

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

5.1.3. 列表推導(dǎo)式

列表推導(dǎo)式提供了一個(gè)更簡(jiǎn)單的創(chuàng)建列表的方法。常見的用法是把某種操作應(yīng)用于序列或可迭代對(duì)象的每個(gè)元素上,然后使用其結(jié)果來(lái)創(chuàng)建列表,或者通過(guò)滿足某些特定條件元素來(lái)創(chuàng)建子序列。

例如,假設(shè)我們想創(chuàng)建一個(gè)平方列表,像這樣

>>>

>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

注意這里創(chuàng)建(或被重寫)的名為 x 的變量在for循環(huán)后仍然存在。我們可以計(jì)算平方列表的值而不會(huì)產(chǎn)生任何副作用

squares = list(map(lambda x: x**2, range(10)))

或者,等價(jià)于

squares = [x**2 for x in range(10)]

上面這種寫法更加簡(jiǎn)潔易讀。

列表推導(dǎo)式的結(jié)構(gòu)是由一對(duì)方括號(hào)所包含的以下內(nèi)容:一個(gè)表達(dá)式,后面跟一個(gè) for 子句,然后是零個(gè)或多個(gè) for 或 if 子句。 其結(jié)果將是一個(gè)新列表,由對(duì)表達(dá)式依據(jù)后面的 for 和 if 子句的內(nèi)容進(jìn)行求值計(jì)算而得出。 舉例來(lái)說(shuō),以下列表推導(dǎo)式會(huì)將兩個(gè)列表中不相等的元素組合起來(lái):

>>>

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

而它等價(jià)于

>>>

>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

注意在上面兩個(gè)代碼片段中, for 和 if 的順序是相同的。

如果表達(dá)式是一個(gè)元組(例如上面的 (x, y)),那么就必須加上括號(hào)

>>>

>>> vec = [-4, -2, 0, 2, 4]
>>> # create a new list with the values doubled
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> # apply a function to all the elements
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> # call a method on each element
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # create a list of 2-tuples like (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
 File "<stdin>", line 1, in <module>
 [x, x**2 for x in range(6)]
 ^
SyntaxError: invalid syntax
>>> # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

列表推導(dǎo)式可以使用復(fù)雜的表達(dá)式和嵌套函數(shù)

>>>

>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

嵌套的列表推導(dǎo)式

列表推導(dǎo)式中的初始表達(dá)式可以是任何表達(dá)式,包括另一個(gè)列表推導(dǎo)式。

考慮下面這個(gè) 3x4的矩陣,它由3個(gè)長(zhǎng)度為4的列表組成

>>>

>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]

下面的列表推導(dǎo)式將交換其行和列

>>>

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

如上節(jié)所示,嵌套的列表推導(dǎo)式是基于跟隨其后的 for 進(jìn)行求值的,所以這個(gè)例子等價(jià)于:

>>>

>>> transposed = []
>>> for i in range(4):
... transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

反過(guò)來(lái)說(shuō),也等價(jià)于

>>>

>>> transposed = []
>>> for i in range(4):
... # the following 3 lines implement the nested listcomp
... transposed_row = []
... for row in matrix:
... transposed_row.append(row[i])
... transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

實(shí)際應(yīng)用中,你應(yīng)該會(huì)更喜歡使用內(nèi)置函數(shù)去組成復(fù)雜的流程語(yǔ)句。 zip() 函數(shù)將會(huì)很好地處理這種情況

>>>

>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

關(guān)于本行中星號(hào)的詳細(xì)說(shuō)明,參見 解包參數(shù)列表。

del 語(yǔ)句

有一種方式可以從列表按照給定的索引而不是值來(lái)移除一個(gè)元素: 那就是 del 語(yǔ)句。 它不同于會(huì)返回一個(gè)值的 pop() 方法。 del 語(yǔ)句也可以用來(lái)從列表中移除切片或者清空整個(gè)列表(我們之前用過(guò)的方式是將一個(gè)空列表賦值給指定的切片)。 例如:

>>>

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del 也可以被用來(lái)刪除整個(gè)變量

>>>

>>> del a

此后再引用 a 時(shí)會(huì)報(bào)錯(cuò)(直到另一個(gè)值被賦給它)。我們會(huì)在后面了解到 del 的其他用法。

元組和序列

我們看到列表和字符串有很多共同特性,例如索引和切片操作。他們是 序列 數(shù)據(jù)類型(參見 序列類型 --- list, tuple, range)中的兩種。隨著 Python 語(yǔ)言的發(fā)展,其他的序列類型也會(huì)被加入其中。這里介紹另一種標(biāo)準(zhǔn)序列類型: 元組。

一個(gè)元組由幾個(gè)被逗號(hào)隔開的值組成,例如

>>>

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

如你所見,元組在輸出時(shí)總是被圓括號(hào)包圍的,以便正確表示嵌套元組。輸入時(shí)圓括號(hào)可有可無(wú),不過(guò)經(jīng)常會(huì)是必須的(如果這個(gè)元組是一個(gè)更大的表達(dá)式的一部分)。給元組中的一個(gè)單獨(dú)的元素賦值是不允許的,當(dāng)然你可以創(chuàng)建包含可變對(duì)象的元組,例如列表。

雖然元組可能看起來(lái)與列表很像,但它們通常是在不同的場(chǎng)景被使用,并且有著不同的用途。元組是 immutable (不可變的),其序列通常包含不同種類的元素,并且通過(guò)解包(這一節(jié)下面會(huì)解釋)或者索引來(lái)訪問(如果是 namedtuples 的話甚至還可以通過(guò)屬性訪問)。列表是 mutable (可變的),并且列表中的元素一般是同種類型的,并且通過(guò)迭代訪問。

一個(gè)特殊的問題是構(gòu)造包含0個(gè)或1個(gè)元素的元組:為了適應(yīng)這種情況,語(yǔ)法有一些額外的改變。空元組可以直接被一對(duì)空?qǐng)A括號(hào)創(chuàng)建,含有一個(gè)元素的元組可以通過(guò)在這個(gè)元素后添加一個(gè)逗號(hào)來(lái)構(gòu)建(圓括號(hào)里只有一個(gè)值的話不夠明確)。丑陋,但是有效。例如

>>>

>>> empty = ()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

語(yǔ)句 t = 12345, 54321, 'hello!' 是 元組打包 的一個(gè)例子:值 12345, 54321 和 'hello!' 被打包進(jìn)元組。其逆操作也是允許的

>>>

>>> x, y, z = t

這被稱為 序列解包 也是很恰當(dāng)?shù)?,因?yàn)榻獍僮鞯牡忍?hào)右側(cè)可以是任何序列。序列解包要求等號(hào)左側(cè)的變量數(shù)與右側(cè)序列里所含的元素?cái)?shù)相同。注意可變參數(shù)其實(shí)也只是元組打包和序列解包的組合。

集合

Python也包含有 集合 類型。集合是由不重復(fù)元素組成的無(wú)序的集。它的基本用法包括成員檢測(cè)和消除重復(fù)元素。集合對(duì)象也支持像 聯(lián)合,交集,差集,對(duì)稱差分等數(shù)學(xué)運(yùn)算。

花括號(hào)或 set() 函數(shù)可以用來(lái)創(chuàng)建集合。注意:要?jiǎng)?chuàng)建一個(gè)空集合你只能用 set() 而不能用 {},因?yàn)楹笳呤莿?chuàng)建一個(gè)空字典,這種數(shù)據(jù)結(jié)構(gòu)我們會(huì)在下一節(jié)進(jìn)行討論。

以下是一些簡(jiǎn)單的示例:

>>>

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # fast membership testing
True
>>> 'crabgrass' in basket
False
>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # letters in both a and b
{'a', 'c'}
>>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}

類似于 列表推導(dǎo)式,集合也支持推導(dǎo)式形式

>>>

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

字典

另一個(gè)非常有用的 Python 內(nèi)置數(shù)據(jù)類型是 字典 (參見 映射類型 --- dict)。字典在其他語(yǔ)言里可能會(huì)被叫做 聯(lián)合內(nèi)存 或 聯(lián)合數(shù)組。與以連續(xù)整數(shù)為索引的序列不同,字典是以 關(guān)鍵字 為索引的,關(guān)鍵字可以是任意不可變類型,通常是字符串或數(shù)字。如果一個(gè)元組只包含字符串、數(shù)字或元組,那么這個(gè)元組也可以用作關(guān)鍵字。但如果元組直接或間接地包含了可變對(duì)象,那么它就不能用作關(guān)鍵字。列表不能用作關(guān)鍵字,因?yàn)榱斜砜梢酝ㄟ^(guò)索引、切片或 append() 和 extend() 之類的方法來(lái)改變。

理解字典的最好方式,就是將它看做是一個(gè) 鍵: 值 對(duì)的集合,鍵必須是唯一的(在一個(gè)字典中)。一對(duì)花括號(hào)可以創(chuàng)建一個(gè)空字典:{} 。另一種初始化字典的方式是在一對(duì)花括號(hào)里放置一些以逗號(hào)分隔的鍵值對(duì),而這也是字典輸出的方式。

字典主要的操作是使用關(guān)鍵字存儲(chǔ)和解析值。也可以用 del 來(lái)刪除一個(gè)鍵值對(duì)。如果你使用了一個(gè)已經(jīng)存在的關(guān)鍵字來(lái)存儲(chǔ)值,那么之前與這個(gè)關(guān)鍵字關(guān)聯(lián)的值就會(huì)被遺忘。用一個(gè)不存在的鍵來(lái)取值則會(huì)報(bào)錯(cuò)。

對(duì)一個(gè)字典執(zhí)行 list(d) 將返回包含該字典中所有鍵的列表,按插入次序排列 (如需其他排序,則要使用 sorted(d))。要檢查字典中是否存在一個(gè)特定鍵,可使用 in 關(guān)鍵字。

以下是使用字典的一些簡(jiǎn)單示例

>>>

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'jack': 4098, 'guido': 4127, 'irv': 4127}
>>> list(tel)
['jack', 'guido', 'irv']
>>> sorted(tel)
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

dict() 構(gòu)造函數(shù)可以直接從鍵值對(duì)序列里創(chuàng)建字典。

>>>

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}

此外,字典推導(dǎo)式可以從任意的鍵值表達(dá)式中創(chuàng)建字典

>>>

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

當(dāng)關(guān)鍵字是簡(jiǎn)單字符串時(shí),有時(shí)直接通過(guò)關(guān)鍵字參數(shù)來(lái)指定鍵值對(duì)更方便

>>>

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}

分享到:
標(biāo)簽:Python
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定