總結(jié) - 容器類(lèi)型

一憔杨、列表補(bǔ)充

  • 列表(list) - 有序趁啸、可變
    [12, 34, 56]
    列表元素的要求:任何類(lèi)型的數(shù)據(jù)都可以作為列表元素
    獲取單個(gè)元素巨缘、獲取部分元素(切片)、遍歷
    相關(guān)運(yùn)算: +, *, ==/!=, in / not in, len(), list(), max(), min()
  • == 和 is
    == - 判斷兩個(gè)數(shù)據(jù)的值是否相等
    is - 判斷地址是否相等
    python數(shù)據(jù)存儲(chǔ):

1.給變量賦值的時(shí)候散庶,如果數(shù)據(jù)的類(lèi)型是數(shù)字或者字符串沛婴,不會(huì)直接開(kāi)辟空間存數(shù)據(jù),
而是現(xiàn)在數(shù)字字符串對(duì)應(yīng)的緩存區(qū)里面去查看是否已經(jīng)存儲(chǔ)過(guò)對(duì)應(yīng)的數(shù)據(jù)督赤。如果已經(jīng)存了嘁灯,
直接將之前的數(shù)據(jù)對(duì)應(yīng)的地址賦給變量。如果沒(méi)有存儲(chǔ)才會(huì)開(kāi)辟空間存儲(chǔ)數(shù)據(jù)躲舌。
其他類(lèi)型的數(shù)據(jù)丑婿,都是直接開(kāi)辟空間存儲(chǔ)數(shù)據(jù)。然后再把地址返回
2.容器類(lèi)型中的元素没卸,在容器中不是直接存的值羹奉,而是元素值對(duì)應(yīng)的地址

二、列表相關(guān)方法

  • 1.列表賦值
    • a.直接使用一個(gè)列表給另一個(gè)列表賦值约计,賦的是地址
      賦完值之后诀拭,對(duì)其中一個(gè)賦值,會(huì)改變另一個(gè)列表
    • b.如果賦值的時(shí)候賦的是列表的切片或者拷貝煤蚌,會(huì)產(chǎn)生新的地址耕挨。然后使用新的地址賦值
      賦完值后细卧,兩個(gè)列表互不影響
list1 = [1, 2, 3]
list2 = list1
list2.append(66)
print(list1)

list3 = list1[:]
list3.append(100)
print(list3)
>>>>
[1, 2, 3, 66]
[1, 2, 3, 66, 100]
  • 2.列表.count(元素) - 獲取指定元素在列表中出現(xiàn)的次數(shù)
nums = [1, 23, 45, 56, 5, 45]
print(nums.count(45))
>>>>
2
  • 3.列表.extend(序列) - 將序列中所有的元素都添加到列表中
numbers = [100, 34, 90, 89, 100, 7, 100, 18, 'abc', 'hello']
numbers.extend(['abc', 'hello'])
print(numbers)
numbers.extend('world')
print(numbers)
numbers.extend(range(11, 15))
print(numbers)
>>>>
[100, 34, 90, 89, 100, 7, 100, 18, 'abc', 'hello']
[100, 34, 90, 89, 100, 7, 100, 18, 'abc', 'hello', 'w', 'o', 'r', 'l', 'd']
[100, 34, 90, 89, 100, 7, 100, 18, 'abc', 'hello', 'w', 'o', 'r', 'l', 'd', 11, 12, 13, 14]
  • 4.列表.index(元素) - 獲取指定元素的下標(biāo)
    注意:a.如果元素有多個(gè),只獲取第一個(gè)的下標(biāo)
    b.如果元素不存在筒占,會(huì)報(bào)錯(cuò)
numbers = [3, 1, 2, 3, 4, 5, 3]
print(numbers.index(3))
>>>>
0
  • 5.列表.reverse() - 反向列表(將列表元素倒序)
nums = [1, 5, 45, 8, 2, 9, 2, 59]
nums.reverse()
print(nums)
  • 6.列表.sort() - 對(duì)列表進(jìn)行升序排序(從小到大)
    列表.sort(reverse=True) - 對(duì)列表進(jìn)行降序排列(從大到刑懊怼)
    注意:列表的要求:a.列表的元素類(lèi)型必須一樣 b.元素支持比較運(yùn)算符
nums.sort()
print(nums)
nums.sort(reverse=True)
print(nums)
>>>>
[59, 2, 9, 2, 8, 45, 5, 1]
[1, 2, 2, 5, 8, 9, 45, 59]
    1. 列表.clear() - 清空列表
      注意:清空列表盡量使用clear()
names = ['路飛', '娜美', '山治', '羅賓', '弗蘭克', '喬巴', '佐羅']
names.clear()
print(names)
>>>>
[]
  • 8.列表.copy - 將列表中元素直接賦值一份產(chǎn)生一個(gè)新的列表
    和列表.[:]效果一樣
    注意:這里的是淺拷貝
list1 = [1, 2, 3]
list2 = list1.copy()
print(list2)
print(list1 is list2)
>>>>
[1, 2, 3]
False

什么時(shí)候使用字典:
如果一個(gè)容器里面儲(chǔ)存的數(shù)據(jù)是不同意義的數(shù)據(jù)(數(shù)據(jù)之間需要區(qū)分)就使用字典

三、淺拷貝和深拷貝

  • copy.copy(對(duì)象) - 淺拷貝(直接拷貝元素的值產(chǎn)生一個(gè)新的地址)
  • copy.deepcopy(對(duì)象) - 深拷貝(不會(huì)直接復(fù)制地址翰苫,
    而是將地址對(duì)應(yīng)的值產(chǎn)生一份生成一個(gè)新的地址)
import copy

numbers1 = [1, 2, 3]
numbers2 = [10, 20, 30]
list1 = [numbers1, numbers2]
list2 = list1.copy()  # 淺拷貝
print("1.淺拷貝")
print("修改前l(fā)ist1:", list1)
print("修改前l(fā)ist2:", list2)
print("對(duì)list1進(jìn)行修改")
list1.append(66)
list1[0].append(666)
print("修改后list1:", list1)
print("修改后list2:", list2)


numbers1 = [1, 2, 3]
numbers2 = [10, 20, 30]
list1 = [numbers1, numbers2]
list2 = copy.deepcopy(list1)  # 淺拷貝
print("2.深拷貝拷貝")
print("修改前l(fā)ist1:", list1)
print("修改前l(fā)ist2:", list2)
print("對(duì)list1進(jìn)行修改")
list1.append(66)
list1[0].append(666)
print("修改后list1:", list1)
print("修改后list2:", list2)
>>>>
1.淺拷貝
修改前l(fā)ist1: [[1, 2, 3], [10, 20, 30]]
修改前l(fā)ist2: [[1, 2, 3], [10, 20, 30]]
對(duì)list1進(jìn)行修改
修改后list1: [[1, 2, 3, 666], [10, 20, 30], 66]
修改后list2: [[1, 2, 3, 666], [10, 20, 30]]
2.深拷貝拷貝
修改前l(fā)ist1: [[1, 2, 3], [10, 20, 30]]
修改前l(fā)ist2: [[1, 2, 3], [10, 20, 30]]
對(duì)list1進(jìn)行修改
修改后list1: [[1, 2, 3, 666], [10, 20, 30], 66]
修改后list2: [[1, 2, 3], [10, 20, 30]]

四止邮、元組

  • 1.元組
    元祖就是不可變的列表(有序,不可變)
    有序 - 可以通過(guò)下標(biāo)獲取元素
    不可變 - 不支持增奏窑、刪导披、改
  • 2.元組的字面量
    通過(guò)小括號(hào)將多個(gè)元素括起來(lái),元素之間用逗號(hào)隔開(kāi)
    a.只有一個(gè)原的元組:在元素的后面必須加一個(gè)逗號(hào)
    b.直接將多個(gè)數(shù)據(jù)用逗號(hào)隔開(kāi)埃唯,括號(hào)可以省略
    c.獲取元組元素
    d.可以通過(guò)變量個(gè)數(shù)和元組元素保持一致來(lái)獲取元組中的每一個(gè)元素
    元組相關(guān)的方法:只有列表中的count和index
tuple1 = (1, True, "abc", [1, 2])
print(tuple1)

tuple2 = (10)
tuple3 = (10,)
print(type(tuple2), type(tuple3))

tuple4 = 1, 2, "abc"
print(type(tuple4))
>>>>
(1, True, 'abc', [1, 2])
<class 'int'> <class 'tuple'>
<class 'tuple'>

五盛卡、字典

  • 1.字典(dict)
    字典是python中內(nèi)置的容器類(lèi)的數(shù)據(jù)類(lèi)型,可變筑凫,無(wú)序的。字典的元素是鍵值對(duì)
  • 2.字典的字面量:使用大括號(hào)括起來(lái)并村,大括號(hào)中的是鍵值對(duì)巍实,多個(gè)鍵值對(duì)之間用
    逗號(hào)隔開(kāi)
    鍵值對(duì) - 鍵:值
    鍵(key) - 不可變的;唯一的
    列表和字典不能作為key
    值(value) - 任何類(lèi)型的數(shù)據(jù)
student = {'name': '小明', 'age': 28, 'tel': '1627399992', 'score': 30, '學(xué)號(hào)':'1982001'}
print(student)
print(student['name'])
>>>>
{'name': '小明', 'age': 28, 'tel': '1627399992', 'score': 30, '學(xué)號(hào)': '1982001'}
小明

六哩牍、字典的增刪改查

1.查(獲取字典的值)
  • a.獲取單個(gè)值
    字典[key] - 獲取字典中key對(duì)應(yīng)的值
    字典.get(key) - 獲取字典中對(duì)應(yīng)的值(如果key不存在棚潦,不會(huì)報(bào)錯(cuò))
    None 是python中的關(guān)鍵字,表示一個(gè)特殊值(沒(méi)有膝昆,空的意思)
zhangsan = {"name": "張三", "age": 89, "gender": "男", "hobby": "play"}
print(zhangsan["name"])

print(zhangsan.get("age"))
print(zhangsan.get("hobby"))
print(zhangsan.get("hahahhahhaha"))

# 直接遍歷字典拿到的是字典中所有的key值
for key in zhangsan:
    print(key)

for key, value in zhangsan.items():
    print(key, value)
>>>>
張三
89
play
None
name
age
gender
hobby
name 張三
age 89
gender 男
hobby play
2.增(添加鍵值對(duì))
  • 字典[key] = 值 - 當(dāng)key不存在的時(shí)候丸边,就是在字典中添加鍵值對(duì)
  • 字典1.update(序列) - 將字典中的元素轉(zhuǎn)換為鍵值對(duì),然后再添加到字典1中
    當(dāng)key值有重名的時(shí)候荚孵,會(huì)用序列中鍵值對(duì)對(duì)應(yīng)的值妹窖,更新原字典key對(duì)應(yīng)的值
    注意:update(序列)要求能夠轉(zhuǎn)換成字典的序列。 序列中的元素是自由兩個(gè)元素的
    小序列
dict3 = {'a': 1, 'b': 2, "c": 3}
dict3.update({'a': 10, 'b': 20})
print(dict3)
>>>>
{'a': 1, 'b': 2}
3.改(修改key對(duì)應(yīng)的值)
  • 字典[key] = 值 - 當(dāng)key存在的時(shí)候收叶,就是修改key對(duì)應(yīng)的值
dict1 = {'a': 10, 'b': 20}
dict1['a'] = 100
print(dict1)
>>>>
{'a': 100, 'b': 20}
4.刪(刪除鍵值對(duì))
  • a.del 字典[key] - 刪除字典中key值對(duì)應(yīng)的鍵值對(duì)
  • b.字典.pop(key) - 取出字典中key對(duì)應(yīng)的值(刪除整個(gè)鍵值對(duì))
    • 字典.popitem() - 取出“最后”一個(gè)鍵值對(duì)骄呼,一元組的形式返回
    • 字典popitem()方法作用是:隨機(jī)返回并刪除字典中的一對(duì)鍵和值(項(xiàng))。
    • 為什么是隨機(jī)刪除呢判没?因?yàn)樽值涫菬o(wú)序的蜓萄,沒(méi)有所謂的“最后一項(xiàng)”或是其它順序。
      在工作時(shí)如果遇到需要逐一刪除項(xiàng)的工作澄峰,用popitem()方法效率很高
# a
person = {'name': '張三', 'age': 30, 'sex': '男'}
del person['sex']
print(person)
# b
person = {'name': '張三', 'age': 30, 'sex': '男'}
age = person.pop('age')
print(person, age)

person = {'name': '張三', 'age': 30, 'sex': '男'}
# 刪除最后一個(gè)鍵值對(duì)(取出最后一個(gè)鍵值對(duì), 以元祖的形式返回) - 無(wú)意義
value = person.popitem()
print(person, value)
>>>>
{'name': '張三', 'age': 30}
{'name': '張三', 'sex': '男'} 30
{'name': '張三', 'age': 30} ('sex', '男'

七嫉沽、字典相關(guān)運(yùn)算和方法

  • 1.字典不支持+和*
    1. in 和not in
      判斷字典中是否存在指定的key
  • 3.clear
    字典.clear() - 清空字典(刪除字典中所有的鍵值對(duì))
  • 4.copy
    字典.copy() - 復(fù)制字典中所有的鍵值對(duì),產(chǎn)生一個(gè)新的字典
  • 5.fromkeys
    dict.fromkeys(序列,值) - 以序列中的元素作為key俏竞,值作為所有key對(duì)應(yīng)的默認(rèn)值绸硕,創(chuàng)建一個(gè)字典
dict.fromkeys(序列, 值) - 以序列中的元素作為key堂竟,值作為所有key對(duì)應(yīng)的默認(rèn)值,創(chuàng)建一個(gè)字典
"""
dict3 = dict.fromkeys('xyzp', 100)
print(dict3)   
dict3 = dict.fromkeys(['name', 'age', 'height'], 100)
print(dict3)    
>>>>
{'x': 100, 'y': 100, 'z': 100, 'p': 100}
{'name': 100, 'age': 100, 'height': 100}
  • 6.keys臣咖、values跃捣、items

字典.keys() - 獲取字典所有的key(返回一個(gè)序列,序列中所有的元素就是字典的key)
字典.values() - 獲取字典所有的值(返回一個(gè)序列夺蛇,序列中所有的元素就是字典的值)
字典.items() - 獲取字典所有的鍵值對(duì)(返回一個(gè)序列疚漆,序列中的元素是元組,元組元素有兩個(gè)分別是key和值)

dict1 = {"x": 89, "y": 45, "z": 56}
keys = dict1.keys()
print(keys, type(keys))
values = dict1.values()
print(values, type(values))
print(list(values))
items = dict1.items()
print(items, type(items))
print(list(items), dict(items))
>>>>
dict_keys(['x', 'y', 'z']) <class 'dict_keys'>
dict_values([89, 45, 56]) <class 'dict_values'>
[89, 45, 56]
dict_items([('x', 89), ('y', 45), ('z', 56)]) <class 'dict_items'>
[('x', 89), ('y', 45), ('z', 56)] {'x': 89, 'y': 45, 'z': 56}
  • 7.setdefault
    字典.setdefault(key,value) - 給字典添加鍵值對(duì)(注意:如果key值本來(lái)存在刁赦,就不會(huì)影響字典)

八娶聘、集合

1.集合(set)
  • a.集合是python內(nèi)置的一個(gè)容器類(lèi)的數(shù)據(jù)類(lèi)型,是可變甚脉、無(wú)序的
  • b.字面量 - 使用{}括起來(lái)丸升,里面有多個(gè)元素,多個(gè)元素之間用逗號(hào)隔開(kāi)
    {1,2,3}
  • c.元素 - 不是鍵值對(duì)牺氨;必須是不可變狡耻,而且是唯一的
set1 = {1, 2, 1, "sdj", "手機(jī)打開(kāi)"}
print(set1)  # 會(huì)自動(dòng)去重

set2 = {}   # 表示一個(gè)空字典
print(type(set2))
set3 = set()   # 創(chuàng)建一個(gè)空集合
print(type(set3))
>>>>
{1, 2, 'sdj', '手機(jī)打開(kāi)'}
<class 'dict'>
<class 'set'>
2.集合的增刪改查
  • a.查(獲取集合元素)
    不能直接獲取集合中單獨(dú)的某個(gè)元素,只能遍歷

  • b.增(添加元素)
    集合.add(元素) - 將指定的元素添加到集合中
    集合.update(序列) - 將序列中的元素添加到集合

  • c.刪(刪除元素)
    集合.remove(元素) - 刪除集合中指定的元素

  • d.改 - 集合不能修改元素的值

3.數(shù)學(xué)集合運(yùn)算

python中的集合支持?jǐn)?shù)學(xué)相關(guān)的集合運(yùn)算

  • 1.包含關(guān)系
    集合1 >= 集合2 判斷集合1中是否包含集合2(判斷集合2是否是集合1的子集)
    集合1 <= 集合2 判斷集合2中是否包含集合1(判斷集合1是否是集合2的子集)

  • 2.求并集
    集合1 | 集合2 - 將兩個(gè)集合中的元素合并在一起產(chǎn)生一個(gè)新的集合

  • 3.交集
    集合1 & 集合2 - 使用兩個(gè)集合中公共的元素猴凹,創(chuàng)建一個(gè)新的集合

  • 4.差集
    集合1 - 集合2

  • 5.補(bǔ)集
    集合1 ^ 集合2 - 使用兩個(gè)結(jié)合中出了公共部分以外的元素夷狰,創(chuàng)建一個(gè)新的集合

set1 = {1, 2, 3, 4}
set2 = {2, 4, 5, 6, 9}
print(set1 | set2)

print(set1 & set2)

print(set1 - set2)

print(set1 ^ set2)
>>>>
{1, 2, 3, 4, 5, 6, 9}
{2, 4}
{1, 3}
{1, 3, 5, 6, 9}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市郊霎,隨后出現(xiàn)的幾起案子沼头,更是在濱河造成了極大的恐慌,老刑警劉巖书劝,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件进倍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡购对,警方通過(guò)查閱死者的電腦和手機(jī)猾昆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)骡苞,“玉大人毡庆,你說(shuō)我怎么就攤上這事±尤纾” “怎么了么抗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)亚铁。 經(jīng)常有香客問(wèn)我蝇刀,道長(zhǎng),這世上最難降的妖魔是什么徘溢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任吞琐,我火速辦了婚禮捆探,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘站粟。我一直安慰自己黍图,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布奴烙。 她就那樣靜靜地躺著助被,像睡著了一般。 火紅的嫁衣襯著肌膚如雪切诀。 梳的紋絲不亂的頭發(fā)上揩环,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音幅虑,去河邊找鬼丰滑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛倒庵,可吹牛的內(nèi)容都是我干的褒墨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼擎宝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼郁妈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起认臊,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锄奢,沒(méi)想到半個(gè)月后失晴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拘央,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涂屁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灰伟。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拆又,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栏账,到底是詐尸還是另有隱情帖族,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布挡爵,位于F島的核電站竖般,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茶鹃。R本人自食惡果不足惜涣雕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一艰亮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挣郭,春花似錦迄埃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至旺垒,卻和暖如春彩库,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背先蒋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工骇钦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竞漾。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓眯搭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親业岁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳞仙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355