Python數(shù)據(jù)類型詳解-列表#學(xué)習(xí)猿地

## 數(shù)據(jù)類型詳解-列表

> 列表就是一組有序的數(shù)據(jù)組合黎做,列表中的數(shù)據(jù)可以被修改

## 列表的定義

+ 可以使用 中括號進行定義 []?

+ 也可以使用 list函數(shù) 定義

+ 在定義列表中的元素時叉跛,需要在每個元素之間使用逗號,進行分隔蒸殿。[1,2,3,4]

+ 列表中的元素可以是任意類型的筷厘,通常用于存放同類項目的集合

## 列表的基本操作

+ 列表定義-[],list()

+ 列表相加-拼接

+ 列表相乘-重復(fù)

+ 列表的下標- 獲取,更新

+ 列表元素的添加-append()

+ 列表元素的刪除

?+ del 列表[下標]

?+ pop()函數(shù) 刪除元素

## 列表中切片

> 語法==> 列表[開始索引:結(jié)束索引:步進值]

1鸣峭。 列表[開始索引:]?==> 從開始索引到列表的最后

2。 列表[:結(jié)束值]??==> 從開始到指定的結(jié)束索引之前

3酥艳。 列表[開始索引:結(jié)束索引] ==> 從開始索引到指定結(jié)束索引之前

4摊溶。 列表[開始索引:結(jié)束索引:步進值] ==> 從指定索引開始到指定索引前結(jié)束,按照指定步進進行取值切片

5充石。 列表[:] 或 列表[::] ==> 所有列表元素的切片

6莫换。 列表[::-1]?==> 倒著獲取列表的元素

示例:

```python

varlist = ['劉德華','張學(xué)友','張國榮','黎明','郭富城','小沈陽','劉能','宋小寶','趙四']

# 從開始索引到列表的最后

res = varlist[2:] # ['張國榮','黎明','郭富城','小沈陽','劉能','宋小寶','趙四']

# 從開始到指定的結(jié)束索引之前

res = varlist[:2] # ['劉德華','張學(xué)友']

# 從開始索引到指定結(jié)束索引之前

res = varlist[2:6] # ['張國榮', '黎明', '郭富城', '小沈陽']

# 從指定索引開始到指定索引前結(jié)束,按照指定步進進行取值切片

res = varlist[2:6:2] # ['張國榮', '郭富城']

# 所有列表元素的切片

res = varlist[:]

res = varlist[::]

# 倒著輸出列表的元素

res = varlist[::-1]

# 使用切片方法 對列表數(shù)據(jù)進行更新和刪除

print(varlist)

# 從指定下標開始骤铃,到指定下標前結(jié)束拉岁,并替換為對應(yīng)的數(shù)據(jù)(容器類型數(shù)據(jù),會拆分成每個元素進行賦值)

# varlist[2:6] = ['a','b','c',1,2,3]

# varlist[2:6:2] = ['a','b'] # 需要與要更新的元素個數(shù)對應(yīng)

# 切片刪除

# del varlist[2:6]

del varlist[2:6:2]

```

## 列表相關(guān)函數(shù)

```python

varlist = ['劉德華','張學(xué)友','張國榮','張學(xué)友','黎明','郭富城','小沈陽','劉能','宋小寶','趙四']

# len()?檢測當前列表的長度惰爬,列表中元素的個數(shù)

res = len(varlist)

# count() 檢測當前列表中指定元素出現(xiàn)的次數(shù)

res = varlist.count('張學(xué)友')

# append() 向列表的尾部追加新的元素喊暖,返回值為 None

varlist.append('川哥')

# insert() 可以向列表中指定的索引位置添加新的元素,

varlist.insert(20,'aa')

# pop() 可以對指定索引位置上的元素做 出棧 操作撕瞧,返回出棧的元素

res = varlist.pop() # 默認會把列表中的最后一個元素 出棧

res = varlist.pop(2) # 會在列表中把指定索引的元素進行 出棧

varlist = [1,2,3,4,11,22,33,44,1,2,3,4]

# remove() 可以指定列表中的元素 進行 刪除,只刪除第一個陵叽。如果沒有找到,則報錯

res = varlist.remove(1)

# index() 可以查找指定元素在列表中第一次出現(xiàn)的索引位置

# res = varlist.index(1)

# res = varlist.index(1,5,20) # 可以在指定索引范圍內(nèi)查找元素的索引位置

# extend() 接收一個容器類型的數(shù)據(jù)丛版,把容器中的元素追加到原列表中

# varlist.extend('123')

# s.clear() # 清空列表內(nèi)容

# varlist.clear()

# reverse() 列表翻轉(zhuǎn)

varlist.reverse()

# sort() 對列表進行排序

res = varlist.sort() # 默認對元素進行從小到大的排序

res = varlist.sort(reverse=True) # 對元素進行從大到小的排序

res = varlist.sort(key=abs) # 可以傳遞一個函數(shù)巩掺,按照函數(shù)的處理結(jié)果進行排序

```

## 深拷貝與淺拷貝

### 淺拷貝

> 淺拷貝只能拷貝列表中的一維元素,**如果列表中存在二維元素或容器硼婿,則引用而不是拷貝**

>

> 使用cpoy函數(shù)或者copy模塊中的copy函數(shù)拷貝的都是淺拷貝

```python

# 淺拷貝 只能拷貝當前列表锌半,不能拷貝列表中的多維列表元素

varlist = [1,2,3]

# 簡單的拷貝 就可以把列表復(fù)制一份

newlist = varlist.copy()

# 對新拷貝的列表進行操作,也是獨立的

del newlist[1]

# print(varlist,id(varlist))

# print(newlist,id(newlist))

'''

[1, 2, 3] 4332224992

[1, 3] 4332227552

'''

# 多維列表

varlist = [1,2,3,['a','b','c']]

# 使用copy函數(shù) 拷貝一個多維列表

newlist = varlist.copy()

'''

print(newlist,id(newlist))

print(varlist,id(varlist))

[1, 2, 3, ['a', 'b', 'c']] 4361085408

[1, 2, 3, ['a', 'b', 'c']] 4361898496

'''

# 如果是一個被拷貝的列表寇漫,對它的多維列表元素進行操作時刊殉,會導(dǎo)致原列表中的多維列表也發(fā)生了變化

del newlist[3][1]

'''

通過id檢測,發(fā)現(xiàn)列表中的多維列表是同一個元素(對象)

print(newlist[3],id(newlist[3]))

print(varlist[3],id(varlist[3]))

['a', 'c'] 4325397360

['a', 'c'] 4325397360

'''

```

### 深拷貝

> 深拷貝就是不光拷貝了當前的列表州胳,**同時把列表中的多維元素或容器也拷貝了一份记焊,而不是引用**

>

> 使用copy模塊中的 deepcopy 函數(shù)可以完成深拷貝

```python

# 深拷貝 就是不光拷貝了當前的列表,同時把列表中的多維元素也拷貝了一份

import copy

varlist = [1,2,3,['a','b','c']]

# 使用 copy模塊中 深拷貝方法 deepcopy

newlist = copy.deepcopy(varlist)

del newlist[3][1]

print(varlist)

print(newlist)

'''

??print(newlist[3],id(newlist[3]))

??print(varlist[3],id(varlist[3]))

??['a', 'c'] 4483351248

??['a', 'b', 'c'] 4483003568

'''

```

## 列表推到式

>List-Comprehensions

>

>列表推導(dǎo)式提供了一個更簡單的創(chuàng)建列表的方法栓撞。

>

>常見的用法是把某種操作應(yīng)用于序列或可迭代對象的每個元素上遍膜,然后使用其結(jié)果來創(chuàng)建列表,或者通過滿足某些特定條件元素來創(chuàng)建子序列瓤湘。

>

>采用一種表達式的當時瓢颅,對數(shù)據(jù)進行過濾或處理,并且把結(jié)果組成一個新的列表

### 一弛说,基本的列表推到式使用方式

> 結(jié)果變量 = [變量或變量的處理結(jié)果 for 變量 in 容器類型數(shù)據(jù)]

示例:

```python

# 1 假設(shè)我們想創(chuàng)建一個平方列表

# 使用普通方法完成

varlist = []

for i in range(10):

??varlist.append(i**2)

# print(varlist)?# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用 map函數(shù)和list完成

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

# print(varlist)?# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用列表推到式完成 下面這個列表推到式和第一種方式是一樣的

varlist = [i**2 for i in range(10)]

# print(varlist)?# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 2挽懦。 '1234' ==> [2,4,6,8]

# 常規(guī)方法完成需求

varstr = '1234'

newlist = []

for i in varstr:

??newlist.append(int(i)*2)

# print(newlist)?# [2, 4, 6, 8]

# 使用列表推到式完成上面的需求

newlist = [int(i)*2 for i in varstr]

# print(newlist)?# [2, 4, 6, 8]

# 使用列表推到式+位運算完成

newlist = [int(i) << 1 for i in varstr]

# print(newlist)?# [2, 4, 6, 8]

```

### 二,帶有判斷條件的列表推到式

> 結(jié)果變量 = [變量或變量的處理結(jié)果 for i in 容器類型數(shù)據(jù) 條件表達式]

示例:

```python

# 0-9 求所有的偶數(shù)木人,==> [0, 2, 4, 6, 8]

# 常規(guī)方法完成

newlist = []

for i in range(10):

??if i % 2 == 0:

????newlist.append(i)

# print(newlist) # [0, 2, 4, 6, 8]

# 列表推到式完成

newlist = [i for i in range(10) if i % 2 == 0]

# print(newlist)?# [0, 2, 4, 6, 8]

```

### 三信柿,對于嵌套循環(huán)的列表推到式

```python

'''

# 下面這個 3x4的矩陣冀偶,它由3個長度為4的列表組成,交換其行和列

[

?[1, 2, 3, 4],

?[5, 6, 7, 8],

?[9, 10, 11, 12],

]

==>

[

??[1, 5, 9],?

??[2, 6, 10],?

??[3, 7, 11],?

??[4, 8, 12]

]

'''

arr = [

?[1, 2, 3, 4],

?[5, 6, 7, 8],

?[9, 10, 11, 12],

]

# 常規(guī)方法完成

# newlist = []

# for i in range(4):

#???res = []

#???for row in arr:

#?????res.append(row[i])

#???newlist.append(res)

# print(newlist)

# 使用列表推到式完成

newlist = [[row[i] for row in arr] for i in range(4)]

print(newlist)

```


掌握學(xué)習(xí)方法渔嚷,不如會彎道超車进鸠!

學(xué)習(xí)猿地:成就自己的只需一套精品!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末形病,一起剝皮案震驚了整個濱河市客年,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漠吻,老刑警劉巖搀罢,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侥猩,居然都是意外死亡际歼,警方通過查閱死者的電腦和手機蛙婴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門奢入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來展辞,“玉大人,你說我怎么就攤上這事划提》愕埽” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵鹏往,是天一觀的道長淡诗。 經(jīng)常有香客問我,道長伊履,這世上最難降的妖魔是什么韩容? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮唐瀑,結(jié)果婚禮上群凶,老公的妹妹穿的比我還像新娘。我一直安慰自己哄辣,他們只是感情好请梢,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著力穗,像睡著了一般毅弧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上当窗,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天够坐,我揣著相機與錄音,去河邊找鬼。 笑死咆霜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嘶朱。 我是一名探鬼主播蛾坯,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疏遏!你這毒婦竟也來了脉课?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤财异,失蹤者是張志新(化名)和其女友劉穎倘零,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戳寸,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡呈驶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疫鹊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袖瞻。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拆吆,靈堂內(nèi)的尸體忽然破棺而出聋迎,到底是詐尸還是另有隱情,我是刑警寧澤枣耀,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布霉晕,位于F島的核電站,受9級特大地震影響捞奕,放射性物質(zhì)發(fā)生泄漏牺堰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一颅围、第九天 我趴在偏房一處隱蔽的房頂上張望萌焰。 院中可真熱鬧,春花似錦谷浅、人聲如沸扒俯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撼玄。三九已至,卻和暖如春墩邀,著一層夾襖步出監(jiān)牢的瞬間掌猛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荔茬,地道東北人废膘。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像慕蔚,于是被迫代替她去往敵國和親丐黄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容