Python數(shù)據(jù)分析的起手式(2)Python 列表 list

本文內(nèi)容整理自DataCamp課程之 Intro to Python for Data Science.

本系列將包括以下內(nèi)容:

訪問 我的github 可下載本文對應(yīng)的notebook以及練習(xí)答案套菜,便于親手實踐已脓。


注意:本文代碼基于Python3版本。如果要在python2中執(zhí)行扳肛,需要先導(dǎo)入_future_模塊锯岖。

#僅在Python2中使用
#from __future__ import division
#from __future__ import print_function

1. List 數(shù)據(jù)類型

上一講中,我們提到了四種數(shù)據(jù)類型,分別是浮點型(float)再登、整型(int)、字符串(str)晾剖、布爾型(bool)锉矢。它們都有個共同特點,那就是這些類型的變量只能存放一個數(shù)值齿尽。如果我們想存儲一家四口人的身高數(shù)據(jù)沽损,該怎么辦呢?是不是要創(chuàng)建4個變量雕什?如果是一個國家的數(shù)據(jù)呢缠俺?

顯然我們需要新的數(shù)據(jù)類型,一種復(fù)合的數(shù)據(jù)類型贷岸,列表(list)則很好地地解決了這一大數(shù)據(jù)量的問題壹士。

列表可以看成是一串有序的數(shù)據(jù)集合,它可以存放任何類型的數(shù)據(jù)偿警,甚至是不同類型的數(shù)據(jù)躏救。你可以將它想象成一列隊伍,其中有各個國家的人螟蒸,甚至還要小貓和小狗盒使。

我們將數(shù)據(jù)放入一對方括號 [ ] 內(nèi)來表示列表,數(shù)據(jù)之間用逗號相隔七嫌。以下是某個四口之家的身高數(shù)據(jù)列表:

family = [1.73, 1.68, 1.71, 1.89]
family

[1.73, 1.68, 1.71, 1.89]

使用 type() 函數(shù)檢查下它的數(shù)據(jù)類型:

type(family)

list

以上列表并不能區(qū)分是誰的身高少办,如何改進呢?還記得我們說過诵原,列表中的元素可以是不同類型的數(shù)據(jù)英妓,所以我們做如下改動。

family = ['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89]
family

['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89]

上面將字符串和實數(shù)混合在一個列表中绍赛,區(qū)分了身高蔓纠。那么再想一想,有沒有更好的辦法呢吗蚌?當然是有的腿倚。

family2 = [['me', 1.73],
          ['sister', 1.68],
          ['mom', 1.71],
          ['dad', 1.89]]
family2

[['me', 1.73], ['sister', 1.68], ['mom', 1.71], ['dad', 1.89]]

看清了嗎?列表的元素也可以是列表蚯妇,以上將每一個小列表敷燎,嵌套入一個更大的列表之中暂筝,使得數(shù)據(jù)的結(jié)構(gòu)更清晰。當然懈叹,還有其他多種方式來表達這組數(shù)據(jù)乖杠,比如字典,因為不是今天的主題就不在此處展開了澄成。

練習(xí)2-1:

在記錄了全家的身高后,你是不是打算再記錄一下家里各個房間的面積呢畏吓。請根據(jù)下面的提示墨状,創(chuàng)建一個房間面積的列表。

# 各房間的面積變量(單位是平方米)
hall = 11.25
kit = 18.0
liv = 20.0
bed = 10.75
bath = 9.50

# 創(chuàng)建面積列表 areas


# 打印輸出 areas

參考上文例子中的方法菲饼,創(chuàng)建一個更清晰的列表肾砂,能顯示出是哪個房間面積。

# 改進后的列表 areas

# 打印輸出 areas

# 輸出 areas 的數(shù)據(jù)類型

2. 列表切片

切片宏悦,顧名思義镐确,就是截取一個片段。有時我們只需要使用列表中的部分數(shù)據(jù)饼煞,可以使用切片操作來實現(xiàn)源葫。

在講具體操作前,我們首先需要了解Python列表的索引規(guī)則砖瞧。列表是有序的息堂,我們用索引來標記這一序列。索引既可以正著數(shù)块促,也可以倒著數(shù)荣堰,但要注意,正向索引時是從0開始計數(shù)的竭翠。

索引

在列表中取單個元素時振坚,我們采用 list_name[index],比如:

family[3]

1.68

family[-2]

'dad'

在列表中取連續(xù)的一串元素時斋扰,采用 list_name[start:end]渡八,但尤其要注意,end 代表的元素并不包含在結(jié)果中褥实。

family[4:6]

['mom', 1.71]

如果從頭部開始取數(shù)呀狼,或結(jié)束在尾部時,可采用省略模式损离。

family[:2]

['me', 1.73]

family[-2:]

['dad', 1.89]

family[:] # 表示全部

['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89]

當然還可以設(shè)置特定的步長間隔哥艇。

family[1:7:2]

[1.73, 1.68, 1.71]

練習(xí)2-2:

依舊使用上一節(jié)練習(xí)中的房間面積數(shù)據(jù),讓我們來練習(xí)下切片操作僻澎。

# 創(chuàng)建 areas 列表
areas = ["hallway", 11.25, "kitchen", 18.0, "living room", 20.0, "bedroom", 10.75, "bathroom", 9.50]

# 打印輸出 areas 中第2個元素

# 打印輸出 areas 中最后一個元素

# 打印輸出 living room 的面積

讓我們用列表元素做個小計算:

# 計算廚房kitchen和臥室bedroom的總面積貌踏,并賦值給 eat_sleep_area

# 打印輸出 eat_sleep_area

想象一下這是一個兩層的迷你小別墅十饥,樓下包括門廳hallway、廚房kitchen祖乳、客廳living room逗堵,樓上包括臥室bedroom和浴室bathroom。

# 切片將樓下的數(shù)據(jù)存入 downstairs

# 切片將樓上的數(shù)據(jù)存入 upstairs

# 打印輸出 downstairs 和 upstairs

3. 列表操作

接下來眷昆,讓我們看看如何對列表進行修改蜒秤、增加、移除等操作亚斋。

隨著時光老去作媚,你發(fā)現(xiàn)爸爸不如以前高了,而自己似乎又長了點帅刊,于是你打算對 family 列表做下修改纸泡。

family[7] = 1.86
family[0:2] = ['taller_me', 1.78]
family

['taller_me', 1.78, 'sister', 1.68, 'mom', 1.71, 'dad', 1.86]

但是可喜的是,又添了一個兄弟赖瞒,于是把他也加入 family 中女揭。

family = family + ['brother', 0.85]
family

['taller_me', 1.78, 'sister', 1.68, 'mom', 1.71, 'dad', 1.86, 'brother', 0.85]

略感哀傷的是,姐姐嫁人了栏饮,離開了這個家庭吧兔,所以得把她從 family 中移除。

del(family[2:4])
family

['taller_me', 1.78, 'mom', 1.71, 'dad', 1.86, 'brother', 0.85]

家庭故事就到這兒結(jié)束啦抡爹,讓我們回歸到邏輯層面掩驱,請猜一猜以下代碼單元中的 x與y、x與z 之間是什么關(guān)系冬竟?

x = ['a', 'b', 'c']
y = x
print(x)
print(y)

['a', 'b', 'c']
['a', 'b', 'c']

如果改變y的值欧穴,會發(fā)生什么情況?

y[0] = 'd'
print(x)
print(y)

['d', 'b', 'c']
['d', 'b', 'c']

x的值竟然也跟著變了泵殴!我們再看:

x = ['a', 'b', 'c']
z = list(x) # 或 z = x[:]
print(x)
print(z)

['a', 'b', 'c']
['a', 'b', 'c']

我們會發(fā)現(xiàn)涮帘,如果改變z的值,x并不會跟著變笑诅。

z[0] = 'e'
print(x)
print(z)

['a', 'b', 'c']
['e', 'b', 'c']

讓我們用下面這幅圖來說明背后的邏輯调缨。Python使用對象模型來存儲數(shù)據(jù),任何類型的值都是一個對象吆你,所有對象都具備三個特性:身份(ID)弦叶、值(value)、類型(type)妇多。這里的列表自然也是對象伤哺,x、y、z這類列表名稱是ID立莉,它們所指向的內(nèi)容才是value绢彤。所以當使用 y = x 時,只是將ID進行傳遞蜓耻,它們所指向的值是同一個茫舶。但是使用 z = list(x),則是創(chuàng)建了一個新的對象z刹淌。

列表

練習(xí)2-3:

現(xiàn)在你打算將房子改造一下饶氏,那么親手試一下吧!

# 創(chuàng)建 areas 列表
areas = ["hallway", 11.25, "kitchen", 18.0, "living room", 20.0, "bedroom", 10.75, "bathroom", 9.50]

# 將浴室bathroom的面積修改為10.5


# 將"living room" 修改為"chill zone"


print(areas)
# 創(chuàng)建一個新的列表 areas_1芦鳍,在原有 areas 列表的基礎(chǔ)上嚷往,增加一個游泳池 poolhouse,面積是24.5平米
areas_1 = 

# 創(chuàng)建一個新的列表 areas_2柠衅,在 areas_1 的基礎(chǔ)上,再增加一個面積為15.45平米的車庫籍琳。
areas_2 = 

print(areas_2)
# 創(chuàng)建 areas_list
areas_list = [11.25, 18.0, 20.0, 10.75, 9.50]

# 創(chuàng)建新的列表 areas_copy菲宴,使它的初始值和 areas_list 相同,但在改變 areas_copy 時不能影響 areas_list 的值
areas_copy = ...

# 改變 areas_copy
areas_copy[0] = 5.0

print(areas_list)
print(areas_copy)

補充:

關(guān)于 我的github 中文件下載的方式:

  • 如果下載單個文件趋急,點擊所要下載的文件喝峦,在新打開的頁面中找到右上方的 raw 按鈕,右擊另存為即可呜达。另外文件名需要刪除后綴 .txt谣蠢,而保留原始格式后綴,如 .ipynb 查近。

  • 如果打包下載眉踱,回到github庫的根目錄中,點擊右上方綠色的 Clone and download 按鈕霜威,選擇 Download ZIP 即可谈喳。

本文使用Jupyter notebook 編寫,關(guān)于它的說明和安裝方法戈泼,可以參考我之前的兩篇文章婿禽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大猛,一起剝皮案震驚了整個濱河市扭倾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挽绩,老刑警劉巖膛壹,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡恢筝,警方通過查閱死者的電腦和手機哀卫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撬槽,“玉大人此改,你說我怎么就攤上這事≈度幔” “怎么了共啃?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暂题。 經(jīng)常有香客問我移剪,道長,這世上最難降的妖魔是什么薪者? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任纵苛,我火速辦了婚禮,結(jié)果婚禮上言津,老公的妹妹穿的比我還像新娘攻人。我一直安慰自己,他們只是感情好悬槽,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布怀吻。 她就那樣靜靜地躺著,像睡著了一般初婆。 火紅的嫁衣襯著肌膚如雪蓬坡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天磅叛,我揣著相機與錄音屑咳,去河邊找鬼。 笑死宪躯,一個胖子當著我的面吹牛乔宿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访雪,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼详瑞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臣缀?” 一聲冷哼從身側(cè)響起坝橡,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精置,沒想到半個月后计寇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年番宁,在試婚紗的時候發(fā)現(xiàn)自己被綠了元莫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝶押,死狀恐怖踱蠢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棋电,我是刑警寧澤茎截,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站赶盔,受9級特大地震影響企锌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜于未,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一撕攒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烘浦,春花似錦打却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猿推。三九已至片习,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹬叭,已是汗流浹背藕咏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秽五,地道東北人孽查。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坦喘,于是被迫代替她去往敵國和親盲再。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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