Ygon's Day06_列表

1. 列表

1.1. 列表介紹

  1. 什么時(shí)候用列表:需要用一個(gè)變量去同時(shí)保存多個(gè)數(shù)據(jù)
  2. 列表:列表是python內(nèi)置的容器型數(shù)據(jù)類型(序列)刃滓,可變(支持增刪改)并且有序(支持下標(biāo)操作)
    用中括號(hào)將多個(gè)元素括起來围辙,多個(gè)元素之間用逗號(hào)隔開:[元素1八孝,元素2抬驴,蒜素3....]
  3. 列表中的元素:python內(nèi)置的數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù),或者程序員自定義類型的數(shù)據(jù)都可以帜乞。
    注意:賦值預(yù)算表達(dá)式不能作為列表元素捡多!
    list = [120,12.9,True,'abc',[1,2,3]]

1.2獲取元素(和字符串一樣)

1.2.1獲取單個(gè)元素

獲取單個(gè)元素(和字符串一樣): 列表[下標(biāo)]

names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下']
# print(names[100])   # IndexError: list index out of range(下標(biāo)越界)
print(names[-2])

1.2.2獲取部分元素(切片)

獲取部分元素-切片(和字符串一樣): 列表[開始下標(biāo):結(jié)束下標(biāo):步長]
切片的返回值是個(gè)列表

print(names[1:4])    # ['火影忍者', '死神', '犬夜叉']
print(names[1:4:-1])     # []
print(names[::-1])    # ['一人之下', '熊出沒', '妖精的尾巴', '犬夜叉', '死神', '火影忍者', '海賊王']
print(names[:])       # ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下']
print(names[::2])     # ['海賊王', '死神', '妖精的尾巴', '一人之下']

1.2.3 遍歷

a.直接遍歷
for 變量 in 列表: # 變量取到的是元素
循環(huán)體

b.通過下標(biāo)遍歷
for 變量 in range(len(列表)): # 變量取到的是下標(biāo)
循環(huán)體

for item in names:
    print(item)

for index in range(0, len(names), 2):
    print(index, names[index])
練習(xí): 將班級(jí)學(xué)生的成績保存到scores中蓖康,求班級(jí)的平均成績,和不及格人數(shù)
scores = [90, 80, 70, 100, 76, 57, 54]
sum1 = 0
count = 0
for score in scores:
    sum1 += score
    if score < 60:
        count += 1
print('平均分是:%.1f 不及格人數(shù):%d' % (sum1/len(scores), count))

補(bǔ)充: 求和函數(shù)sum

sum(序列) - 求序列中所有元素的和垒手;序列要求元素類型一致蒜焊,并且元素支持求和運(yùn)算
print(sum(scores), sum(range(101)))
sum()求和函數(shù)
sum(序列) -求序列中所有元素的和;序列要求元素類型必須是數(shù)字類型科贬。

1.3 列表的增刪改

  1. 增: -列表.append(元素)泳梆,在指定的列表最后添加指定元素
persons = ['路飛', '寶兒姐', '張楚楠']
persons.append('容嬤嬤')
print(persons)
persons.append('趙云')
print(persons)

插入: -insert(下標(biāo),元素)唆迁,在指定列表的指定位置插入元素

numbers = [1, 20, 34, 50]
numbers.insert(2, 22)
print(numbers)
numbers.insert(0, 1000)
print(numbers)
練習(xí): 輸入一個(gè)數(shù)字鸭丛,將它添加到一個(gè)有序列表中竞穷,要求添加進(jìn)去后不改變從小到大或者從大到小排列的順序[1, 20, 100, 200] 輸入: 50 [1, 20, 50,100, 200]; 輸入:0 [0, 1, 20, 100, 200], 輸入: 500 [1, 20, 100, 200, 500]
numbers = [1, 20, 100, 200]
num = int(input('請(qǐng)輸入一個(gè)數(shù)字:'))
思路: 找到第一個(gè)比輸入的數(shù)字大的數(shù)字對(duì)應(yīng)的下標(biāo),然后插入到這個(gè)下標(biāo)前。如果原來的數(shù)字都比輸入的小蜀变,就添加到最后
for index in range(len(numbers)):
    if numbers[index] > num:
        numbers.insert(index, num)
        break
else:
    numbers.append(num)

print(numbers)
  1. 刪:-del 列表[下標(biāo)]驻售;
    列表.remove(元素),將指定列表中第一個(gè)指定元素刪除看政。
names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下', '海賊王']
del names[2]
print(names)
names.remove('海賊王')
print(names)

列表.pop(下標(biāo))朴恳,刪除列表指定位置的元素,返回被移除的元素

names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下', '海賊王']
del_name = names.pop()
print(names, del_name)

del_name = names.pop(1)
print(names, del_name)

清空:列表.clear() -清空列表所有元素
names.clear()
print(names)

  1. 改: 列表[下標(biāo)]=新值 -將列表中指定下標(biāo)對(duì)應(yīng)的元素改成新值
nums = [1, 2, 3]
nums[0] = 100
print(nums)
  1. in / not in
    元素 in 列表 -- 判斷列表中是否包含指定的元素
print([1, 2] in [1, 2, 3, 4, [1, 2]])   # True
print([1, 2] in [1, 2, 3, 4])   # False
print(1 in [[1], 2, 3])   # False
print(1 in [1, 2, 3])    # True

1.4 列表的相關(guān)運(yùn)算

1.4.1 數(shù)學(xué)運(yùn)算: +, *

列表1+列表2 - 將兩個(gè)列表中的元素合并產(chǎn)生一個(gè)新的列表(原列表不會(huì)發(fā)生改變)
列表*N - 列表中的元素重復(fù)N次產(chǎn)生新的列表

list1 = [1, 2, 3]
list2 = ['name', 'age']
new_list = list1 + list2
print(new_list, list1, list2)
print(list1*3)
list3 = [1]*100
print(list3)

1.4.2 比較運(yùn)算: ==, !=

list4 = [1, 2]
print([1, 2] == [2, 1])  # False
print([1, 2] != [2, 1])  # True
print([1, 2] == list4)   # True

注意:>, <, >=, <= 只支持相同位置上元素類型相同的兩個(gè)列表

例如: print([1, 2, 3] > ['a', 'b']) #TypeError: '>' not supported between instances of 'int' and 'str'

1.5 內(nèi)置函數(shù)

len(列表)允蚣、sum(列表) - 要求列表中的元素必須是數(shù)字于颖、max(列表)、min(列表)
list(數(shù)據(jù)) - 將指定數(shù)據(jù)轉(zhuǎn)換成列表, 所有的序列都可以轉(zhuǎn)換成列表,比如: 字符串嚷兔,列表森渐、字典、集合冒晰、元祖同衣、range、迭代器壶运、生成器等 - 轉(zhuǎn)換的時(shí)候是將序列中的元素作為列表元素

print(list('abcd'))
print(list(range(5)))
print(list(str(123)))

nums = ['10', '23', '4']   # 10234
print(''.join(nums))

1.6. 相關(guān)方法

  • 列表.count(元素) - 獲取指定元素在列表中出現(xiàn)的次數(shù), 結(jié)果是整數(shù)
  • 列表.extend(序列) - 將序列中的元素添加到列表中, 結(jié)果None(返回值為空)
list1=[]
list1.extend('abc')
print(list1)
#運(yùn)行結(jié)果:['a', 'b', 'c']
  • 列表.index(元素) - 獲取指定元素在列表中的下標(biāo)耐齐,如果這個(gè)元素有多個(gè)只獲取第一個(gè),如果元素不存在會(huì)報(bào)錯(cuò)
list2 = [1, 0, 1, 2, '張飛', '關(guān)羽', '趙云', '呂布']
print(list2.index('張飛'))
#運(yùn)行結(jié)果:4
print(list2.index('諸葛亮'))    # ValueError: '諸葛亮' is not in list
  • 列表.reverse() - 將列表中的元素倒序, 沒有返回值(None)。
    list2.reverse()
    print(list2)
list1=[1,2,3,4,5]
list1.reverse()
print(list1)                     #[5,4,3,2,1]

補(bǔ)充: 內(nèi)置函數(shù): reversed(序列) - 將序列中的元素倒序產(chǎn)生一個(gè)新的迭代器埠况, 原序列不會(huì)修改


list1 = [1, 2, 3]
result = reversed('abc')
# for item in result:
#     print(item)
print(list(result))
print(list1)
  • 列表.sort() - 對(duì)列表中的元素從小到大排序(列表中的元素類型一致并且支持比較運(yùn)算), 不會(huì)產(chǎn)生新的列表
list1 = [1, 5,2,7, 3,4]
list1.sort()
print(list1)      #[1, 2, 3, 4, 5, 7]
#補(bǔ)充:列表.sort(reverse=True)   -  從大到小排序
list1.sort(reverse=True)
print(list1)      #[7, 5, 4, 3, 2, 1]
  • 列表.copy() - 產(chǎn)生一個(gè)新的列表耸携,列表中的元素和原列表一樣,相當(dāng)于: 列表[:]
list1 = [1, 2, 3]
list2 = list1
list3 = list1.copy()           #list2與list3的區(qū)別在于:list2與list1完全相等询枚,地址也相同违帆,list3雖然copy了list1的元素值,但是地址不同金蜀,內(nèi)存重新開辟空間存儲(chǔ)list3刷后。
print(list2, list3)          #[1, 2, 3]    [1, 2, 3]
list1.append(10)
print (list2,list3)          #[1, 2, 3, 10] [1, 2, 3]
# 補(bǔ)充:  id(變量) - 查看變量中實(shí)質(zhì)存儲(chǔ)的地址
# python所有變量實(shí)質(zhì)都是直接保存的數(shù)據(jù)在內(nèi)存中的地址
print(id(list1), id(list2), id(list3))    #11093456 11093456 11094616

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渊抄,隨后出現(xiàn)的幾起案子尝胆,更是在濱河造成了極大的恐慌,老刑警劉巖护桦,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件含衔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡二庵,警方通過查閱死者的電腦和手機(jī)贪染,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催享,“玉大人杭隙,你說我怎么就攤上這事∫蛎睿” “怎么了痰憎?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攀涵。 經(jīng)常有香客問我铣耘,道長,這世上最難降的妖魔是什么以故? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任蜗细,我火速辦了婚禮,結(jié)果婚禮上怒详,老公的妹妹穿的比我還像新娘炉媒。我一直安慰自己,他們只是感情好棘利,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布橱野。 她就那樣靜靜地躺著,像睡著了一般善玫。 火紅的嫁衣襯著肌膚如雪水援。 梳的紋絲不亂的頭發(fā)上密强,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蜗元,去河邊找鬼或渤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奕扣,可吹牛的內(nèi)容都是我干的薪鹦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼惯豆,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼池磁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起楷兽,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤地熄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芯杀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體端考,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年揭厚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了却特。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筛圆,死狀恐怖裂明,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顽染,我是刑警寧澤漾岳,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布轰绵,位于F島的核電站粉寞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏左腔。R本人自食惡果不足惜唧垦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望液样。 院中可真熱鬧振亮,春花似錦、人聲如沸鞭莽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澎怒。三九已至褒搔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背星瘾。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工走孽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琳状。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓磕瓷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親念逞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子困食,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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