DAY8容器

列表(list)

1.列表相關(guān)運(yùn)算

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)

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] > [100, 'z'])
# print([1, 2, 3] > ['a', 'b'])   #TypeError: '>' not supported between instances of 'int' and 'str'

2.內(nèi)置函數(shù)

len(列表)筐骇、sum(列表) - 要求列表中的元素必須是數(shù)字魂莫、max(列表)智哀、min(列表)
list(數(shù)據(jù)) - 將指定數(shù)據(jù)轉(zhuǎn)換成列表, 所有的序列都可以轉(zhuǎn)換成列表,比如: 字符串碍岔,列表君珠、字典囚企、集合、元祖袖裕、range、迭代器罢浇、生成器等
轉(zhuǎn)換的時(shí)候是將序列中的元素作為列表元素

# print(sum(['1', 'abc', 'hj']))
# print(max([1, 'a']))

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

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

3.相關(guān)方法

  1. 列表.count(元素) - 獲取指定元素在列表中出現(xiàn)的次數(shù), 結(jié)果是整數(shù)
print([1, 2, 3, 1, 4].count(1))
  1. 列表.extend(序列) - 將序列中的元素添加到列表中, 結(jié)果None
list1 = []
list1.extend('abc')
print(list1)
list1.extend(range(3))
print(list1)
list1.extend(['張飛', '關(guān)羽', '趙云'])
print(list1)

list1.extend(['呂布'])
print(list1)

3)列表.index(元素) - 獲取指定元素在列表中的下標(biāo)陆赋,如果這個(gè)元素有多個(gè)只獲取第一個(gè),如果元素不存在會(huì)報(bào)錯(cuò)

list2 = [1, 0, 1, 2, '張飛', '關(guān)羽', '趙云', '呂布']
print(list2.index('張飛'))
# print(list2.index('諸葛亮'))    # ValueError: '諸葛亮' is not in list

4)列表.reverse() - 將列表中的元素倒序, 不會(huì)產(chǎn)生新列表

list2.reverse()
print(list2)

補(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)

5)列表.sort() - 對(duì)列表中的元素從小到大排序(列表中的元素類型一致并且支持比較運(yùn)算), 不會(huì)產(chǎn)生新的列表

# 列表.sort(reverse=True)   -  從大到小排序
scores = [10, 100, 89, 20, 67, 34, 9]
# scores.sort()
# print(scores)      # python cookbook/ 流暢的python

scores.sort(reverse=True)
print(scores)

6)列表.copy() - 產(chǎn)生一個(gè)新的列表攒岛,列表中的元素和原列表一樣,相當(dāng)于: 列表[:]

list1 = [1, 2, 3]
list2 = list1
list3 = list1.copy()
print(list2, list3)

list1.append(10)
print(list2, list3)

id(變量) - 查看變量中實(shí)質(zhì)存儲(chǔ)的地址
python所有變量實(shí)質(zhì)都是直接保存的數(shù)據(jù)在內(nèi)存中的地址

print(id(list1), id(list2), id(list3))

delItem

列表中刪除數(shù)據(jù)
刪除列表中所有小于60的數(shù)字
問題1: 通過元素刪除的時(shí)候可能出現(xiàn)刪不干凈的問題

scores = [10, 50, 90, 89, 45, 70]
for score in scores:
    if score < 60:
        scores.remove(score)

print(scores, score)    # [50, 90, 89, 20, 70]

"""
scores = [10, 50, 90, 89, 45, 70]
score = 10   if 10 < 60    scores.remove(10)   scores = [50, 90, 89, 45, 70]  
score = 90   if 90 < 60
score = 89   if 89 < 60
score = 45   if 45 < 60    scores.remove(45)   scores = [50, 90, 89, 70] 
"""

# 解決問題1:
scores = [10, 50, 90, 89, 45, 70]
scores2 = scores[:]
for score in scores2:
    if score < 60:
        scores.remove(score)
del scores2    # score2只是提供遍歷用的胞锰,用完后沒有其他用處灾锯,可以直接刪除
print(scores, score)


# 上面的簡(jiǎn)寫
scores = [10, 50, 90, 89, 45, 70]
for score in scores[:]:
    if score < 60:
        scores.remove(score)
print(scores, score)
"""
scores = [10, 50, 90, 89, 45, 70]
scores2 = [10, 50, 90, 89, 45, 70]
score = 10   if 10<60  scores.remove(10)   scores = [50, 90, 89, 45, 70]
score = 50   if 50<60  scores.remove(50)   scores = [90, 89, 45, 70]
score = 90   if 90<60
score = 89   if 89<60
score = 45   if 45<60  scores.remove(45)   scores = [90, 89,70]
score = 70   if 70<60
"""


# 問題2:通過下標(biāo)刪除滿足要求的元素的時(shí)候,出現(xiàn)下標(biāo)越界的錯(cuò)誤
print('====================問題2=====================')
# scores = [10, 50, 90, 89, 45, 70]
# for index in range(len(scores)):
#     if scores[index] < 60:
#         del scores[index]
#
# print(scores)
"""
scores = [10, 50, 90, 89, 45, 70]
for index in range(6)  
index = range(6)  index = (0,1,2,3,4,5)
index = 0   if scores[0]<60   if 10<60   del scores[0]  scores = [50, 90, 89, 45, 70]
index = 1   if scores[1]<60   if 90<60   
index = 2   if scores[2]<60   if 89<60
index = 3   if scores[3]<60   if 45<60   del scores[3]  scores = [50, 90, 89, 70]
index = 4   if scores[4]<60  (out of range)
"""
# 解決問題2:
scores = [10, 50, 90, 89, 45, 70]
index = 0
while index < len(scores):
    if scores[index] < 60:
        del scores[index]
        continue
    index += 1

print(scores)
"""
scores = [10, 50, 90, 89, 45, 70]   
index = 0
while 0 < 6    if 10<60   del scores[0]   scores = [50, 90, 89, 45, 70] 
while 0 < 5    if 50<60   del scores[0]   scores = [90, 89, 45, 70]
while 0 < 4    if 90<60   index += 1  index = 1
while 1 < 4    if 89<60   index += 1  index = 2
while 2 < 4    if 45<60   del scores[2]   scores = [90, 89,70]
while 2 < 3    if 70<60   index += 1  index = 3  
while 3 < 3 
print(scores)  -  [90, 89,70] 
"""

元祖

1.什么是元祖(tuple):

元祖就是不可變的列表, 作為序列不可變(不支持增刪改)但是有序(支持下標(biāo)操作)
(元素1, 元素2, 元素3,....) , 元素的要求和列表一樣

2.查 - 獲取元素 (和列表一樣)

tuple1 = ('abc', 2, 3, 4)
print(tuple1[0], tuple1[-1])
# print(tuple1[10])   # IndexError: tuple index out of range
print(tuple1[0:5:2])
for item in tuple1:
    print(item)

for index in range(len(tuple1)):
    print(index, tuple1[index])

3.數(shù)學(xué)運(yùn)算嗅榕、比較運(yùn)算顺饮、in/not in、 len(), max(), min(), sum(), tuple()和對(duì)應(yīng)的列表操作是一樣的

print((1, 2, 3)+('a', 'b', 'c'))
print((1, 2, 3) * 2)
print(100 in (1, 2, 3))
print(tuple('abcd'), tuple(range(4)), tuple(['abc', 100]))

4.元祖專有特點(diǎn)

1)只有一個(gè)元素的元祖, 需要在這個(gè)元素的后面加一個(gè)逗號(hào)

tu1 = ('abc',)
print(type(tu1))

2)元祖的值可以去掉小括號(hào)凌那,(直接將多個(gè)元素用逗號(hào)隔開兼雄,也表示一個(gè)元祖)

tu2 = 10, 20, 30, 'abc'
print(tu2, type(tu2))
  1. 讓變量的個(gè)數(shù)和元祖中元素的個(gè)數(shù)保持一致,可以讓變量依次取出元祖的中的元素
point = (100, 200)
x, y = point
print(x, y)

x, y = (100, 200)
x, y = 100, 200

a = 10
b = 20
a, b = (b, a)       # a, b = (b,a) = (20, 10)  a = 20, b=10

3.2) 通過多個(gè)變量去獲取元祖元素的時(shí)候帽蝶,可以在某個(gè)變量的前面加來將這個(gè)變量變成列表獲取不帶的變量取剩下的數(shù)據(jù)
注意:這兒帶*的變量只能有一個(gè)

student = ('小明', 30, 60, 50, 100, 175)
name, age, *scores, height = student
print(name, scores)

name, *x = student
print(name, x)

*x, y, z = student
print(x, y)

字典(dict)

1.什么是字典(dict)

字典是python內(nèi)置的一個(gè)容器型數(shù)據(jù)類型, 可變(支持增刪改)赦肋、無序(不支持下標(biāo)操作)
{鍵1:值1, 鍵2:值2, 鍵3:值3,....} 鍵:值 -> 鍵值對(duì)
鍵(key): a.不可變 b.唯一 (實(shí)際開發(fā)建議用字符串)
值(value): 和列表元素的要求一樣
注意: 鍵值對(duì)是成對(duì)出現(xiàn);字典存數(shù)據(jù)励稳,實(shí)質(zhì)要存的是值佃乘,鍵是值的索引

dict1 = {'a': 100, 'b': 'abc', 'c': [1, 2], 'd': {'a': 100}}
print(dict1)

dict1 = {'a': 100, 'b': 'abc', 'a': [1, 2]}
print(dict1)   # {'a': [1, 2], 'b': 'abc'}

2.什么時(shí)候用字典

如果同時(shí)保存的多個(gè)數(shù)據(jù)是具有相同意義的數(shù)據(jù),用列表驹尼;如果同時(shí)保存的多個(gè)數(shù)據(jù)的意義不同趣避,就使用字典

person1 = ['余婷', 18, 100, 40, 155, 50]
person2 = {'name': '余婷', 'age': 18, 'score': 100, 'height': 155, 'weight': 50}
print(person1[0])
print(person2['name'])

allstudents = [
                {'name': '張三', 'age': 18, 'tel': '110', 'dog':{'sex': '母狗', 'color': '白色', 'name': '大黃'}},
                {'name': '小明', 'age': 20, 'tel': '220'},
                {'name': '張三', 'age': 18, 'tel': '110'}
               ]

print(allstudents[0]['dog']['color'])

3.查 - 獲取字典的值

  1. 獲取key對(duì)應(yīng)的值: 字典[key] - 獲取字典中指定key對(duì)應(yīng)的值
    注意: 如果key不存在,會(huì)報(bào)KeyError
dog1 = {'name': '大黃', 'type': '中華田園犬', 'color': 'yellow', 'age': 3}
print(dog1['type'])
# print(dog1['gender'])    # KeyError: 'gender'

獲取key對(duì)應(yīng)的值:
字典.get(key) - 獲取字典中指定key對(duì)應(yīng)的值, 如果key值不存在返回默認(rèn)值None
字典.get(key, 默認(rèn)值) - 獲取字典key對(duì)應(yīng)的值新翎,如果key不存在返回指定的默認(rèn)值
None是python中的關(guān)鍵字,表示數(shù)據(jù)為空或者沒有的意思

print(dog1.get('color'))
print(dog1.get('gender'))
print(dog1.get('gender', '公狗'))

2)遍歷
直接遍歷字典拿到是key

dog1 = {'name': '大黃', 'type': '中華田園犬', 'color': 'yellow', 'age': 3}
print('===========遍歷===========')
for key in dog1:
    print(key, dog1[key])

遍歷字典選第一種方法程帕,后面的方法要看得懂

print('===========遍歷2===========')
print(dog1.values())
for value in dog1.values():
    print(value)

print('===========遍歷3===========')
for key in dog1.keys():
    print(key)

print('===========遍歷4===========')
print(dog1.items())
for key, value in dog1.items():
    print(key, value)

4.增/改 - 添加鍵值對(duì)

字典[key] = 值 - 當(dāng)key不存在的時(shí)候就是添加鍵值對(duì);當(dāng)key存在的時(shí)候料祠,就是修改key對(duì)應(yīng)的值

film = {'name': '流浪地球', '主演': '吳京', 'time': '2019-2-5'}
film['票房'] = '40億'
print(film)

film['time'] = '2019-2-6'
print(film)

film.setdefault('a', 10)
print(film)

# 字典.setdefault(key, value)   - 只能條件鍵值對(duì)骆捧,不能修改
film.setdefault('name', '戰(zhàn)狼2')
print(film)

5.刪

del 字典[key] - 刪除字典中key對(duì)應(yīng)的鍵值對(duì), 如果key不存在會(huì)報(bào)錯(cuò)

film = {'name': '流浪地球', '主演': '吳京', 'time': '2019-2-5'}
del film['time']
print(film)

字典.pop(key) - 從字典中取出key對(duì)應(yīng)的值,結(jié)果是key對(duì)應(yīng)的值

name = film.pop('name')
print(film, name)

6.相關(guān)運(yùn)算

只支持比較運(yùn)算符

print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})    # True

in / not in
key in 字典 - 判斷字典中是否存在某個(gè)key對(duì)應(yīng)的鍵值對(duì)

student = {'name': '小明', 'age': 20, 'tel': '16362738493'}
print('小明' in student)   # False
print('name' in student)    # True

len(), max(), min()
dict() - 本身是一個(gè)序列髓绽,序列中元素是小序列敛苇,小序列必須有且只有2個(gè)元素,而且這個(gè)2個(gè)元素中的第一個(gè)元素是不可變的
注意:取最大值最小值是取key的最大值和最小值;字典轉(zhuǎn)列表/元祖的時(shí)候,是將字典的key取出來作為列表/元祖的元素

print(len(student))
print(max(student))
print(dict(['cb', ['a', 100],  [1000, [1]] ]))
print(list(student))

7.相關(guān)方法

1)字典.clear() - 清空字典

student.clear()
print(student)

2)字典.copy() - 復(fù)制字典的內(nèi)容枫攀,產(chǎn)生一個(gè)新的字典

student = {'name': '小明', 'age': 20, 'tel': '16362738493'}
student1 = student.copy()
student1['name'] = '小花'
print(student)
  1. dict.fromkeys(序列,值) - 創(chuàng)建一個(gè)新的字典括饶,將序列中的元素作為新字典的key,指定的值作為每個(gè)key對(duì)應(yīng)的值
new_dict = dict.fromkeys(['name', 'age', 'gender'], None)
print(new_dict)

person_keys = ['name', 'age', 'gender']
person1 = dict.fromkeys(person_keys, None)
person2 = dict.fromkeys(person_keys, None)
  1. 字典1.update(字典2) - 將字典2中的鍵值對(duì)添加到字典1中
dict1 = {'a': 10, 'b': 20, 'z': 100}
dict1.update({'c': 30, 'b': 200})
print(dict1)  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市来涨,隨后出現(xiàn)的幾起案子图焰,更是在濱河造成了極大的恐慌,老刑警劉巖蹦掐,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件技羔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡卧抗,警方通過查閱死者的電腦和手機(jī)藤滥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來社裆,“玉大人拙绊,你說我怎么就攤上這事∮拘悖” “怎么了标沪?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嗜傅。 經(jīng)常有香客問我金句,道長(zhǎng),這世上最難降的妖魔是什么吕嘀? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任趴梢,我火速辦了婚禮,結(jié)果婚禮上币他,老公的妹妹穿的比我還像新娘。我一直安慰自己憔狞,他們只是感情好蝴悉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘾敢,像睡著了一般拍冠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上簇抵,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天庆杜,我揣著相機(jī)與錄音,去河邊找鬼碟摆。 笑死晃财,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的典蜕。 我是一名探鬼主播断盛,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罗洗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钢猛?” 一聲冷哼從身側(cè)響起伙菜,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎命迈,沒想到半個(gè)月后贩绕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壶愤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年淑倾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公你。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踊淳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陕靠,到底是詐尸還是另有隱情迂尝,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布剪芥,位于F島的核電站垄开,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏税肪。R本人自食惡果不足惜溉躲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望益兄。 院中可真熱鬧锻梳,春花似錦、人聲如沸净捅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛔六。三九已至荆永,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間国章,已是汗流浹背具钥。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留液兽,地道東北人骂删。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親桃漾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坏匪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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