04-Dict字典&Set集合&字符串

一、dict字典

1.概述

思考問題:保存多個(gè)學(xué)生的成績(jī)

list1 = [65,7,8,99,100]

tuple1 = (65,7,8,99,100)

存在的問題:無法學(xué)生和成績(jī)的匹配

解決問題:字典,將學(xué)生姓名作為key,成績(jī)作為value,進(jìn)行存儲(chǔ),方便查找

本質(zhì):也只一種存儲(chǔ)數(shù)據(jù)的方式,數(shù)據(jù)是以鍵值對(duì)的形式存儲(chǔ)的,但是字典是無序的

優(yōu)點(diǎn):具有快速查找的優(yōu)勢(shì)

2.key的特性

a.字典中的key必須是唯一的

b.字典中的key必須是不可變的

? list是可變的,不能充當(dāng)key

? tuple是不可變的,可以充當(dāng)key,整數(shù),字符串都可以充當(dāng)key

3.字典的創(chuàng)建

語法:字典名稱 = {key1:value1,key2:value2,.......}

代碼演示:

#創(chuàng)建空字典
dict1 = {}

#創(chuàng)建帶有鍵值對(duì)的字典
dict2 = {"zhangsan":96,"lisi":60,"jack":80}
print(dict2)

4.元素訪問

4.1 獲取

語法:字典名[key]

代碼演示:

#字典中元素的訪問
dict1 = {"zhangsan":96,"lisi":60,"jack":80}
#1.獲取
#通過key獲取對(duì)應(yīng)的value
score = dict1["lisi"]
print(score)

#如果key不存在的時(shí)候,無法訪問
#print(dict1["tom"])  #KeyError: 'tom'

#雖然key不存在,但是不會(huì)報(bào)錯(cuò),返回的是None
result = dict1.get("tom")
print(result)
if result == None:
    print("key不存在")
else:
    print("key是存在的")
4.2 添加

代碼演示:

#2.修改和添加
print(dict1)
#當(dāng)key不存在的時(shí)候,表示添加一對(duì)鍵值對(duì)
dict1["tom"] = 70
print(dict1)
#當(dāng)key存在的時(shí)候,表示修改對(duì)應(yīng)的value
dict1["lisi"] = 88
print(dict1)
4.3 刪除

代碼演示:

#3.刪除
#注意:刪除指定的key,則對(duì)應(yīng)的value也會(huì)隨著被刪除
dict1.pop("lisi")
print(dict1)

5.字典的遍歷

代碼演示:

dict1 = {'zhangsan': 96, 'lisi': 88, 'jack': 80, 'tom': 70}

#1.只獲取key【掌握】
for key in dict1:
    #通過key獲取value
    value = dict1[key]
    print(key,"=",value)

#2.只獲取value
#將所有的value重新生成了一個(gè)列表
list1 = dict1.values()
print(list1)
for value in list1:
    print(value)

#3.同時(shí)獲取鍵值對(duì)的索引以及key
for i,key in enumerate(dict1):
    print(i,key)
    print(dict1[key])

#4.同時(shí)獲取key和value【掌握】
for key,value in dict1.items():
    print(key,value)

6.

代碼演示:

#1.逐一顯示指定字典中的所有鍵,并在顯示結(jié)束之后輸出總鍵數(shù)
dict1= {"x":1,"y":2,"z":3}
#count1 = 0
for key in dict1:
    print(key)
    #count1 += 1
else:
    print(len(dict1))

#2.list1 = [0,1,2,3,4,5,6],list2 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].以list1中的元素作為key,
# 以list2中的元組作為value生成一個(gè)新的字典dict2
list1 = [0,1,2,3,4,5,6]
list2 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
dict2 = {}
#{0:"Sun",1:"Mon".....}

#定義一個(gè)變量,作為list1和list2的索引
index = 0

#前提:兩個(gè)列表的長(zhǎng)度相等
if len(list1) == len(list2):

    while index < len(list1):
        #當(dāng)字典中不存在某個(gè)key-value時(shí),賦值于相當(dāng)于添加一對(duì)鍵值對(duì)
        dict2[list1[index]] = list2[index]    #dict2[0] = "Sun"
        #為了循環(huán)可以在適當(dāng)?shù)臅r(shí)機(jī)停止下來,可以將list1和list2中的元素全部獲取出來,賦值給字典
        index += 1

print(dict2)

二、set集合

1.概述

和數(shù)學(xué)上的集合基本是一樣的,

特點(diǎn):不允許有重復(fù)元素,可以進(jìn)行交集,并集,差集的運(yùn)算

本質(zhì):無序,無重復(fù)元素的集合

2.創(chuàng)建

set(列表或者元組或者字典)

代碼演示:

#注意:set的創(chuàng)建需要借助于list和tuple

#1.通過list創(chuàng)建set
list1 = [432,5,5,46,65]
s1 = set(list1)
print(list1)
print(s1)

#注意1:set中會(huì)自動(dòng)將重復(fù)元素過濾掉

#2.通過tuple創(chuàng)建set
tuple1 = (235,45,5,656,5)
s2 = set(tuple1)
print(tuple1)
print(s2)

#3.通過dict創(chuàng)建set
dict1 = {1:"hello",2:"good"}
s3 = set(dict1)
print(dict1)   #{1: 'hello', 2: 'good'}
print(s3)   #{1, 2}

#注意2:set跟dict類似,都使用{}表示,但是與dict之間的區(qū)別在于:set中相當(dāng)于只存儲(chǔ)了一組key,沒有value

3.操作

3.1添加

代碼演示:

#1.添加
#add()   在set的末尾進(jìn)行追加
s1 = set([1,2,3,4,5])
print(s1)
s1.add(6)
print(s1)

#注意:如果元素已經(jīng)存在,則添加失敗
s1.add(3)
print(s1)
#print(s1.add(3))

#s1.add([7,8,9])   #TypeError: unhashable type: 'list'  list是可變的,set中的元素不能是list類型
s1.add((7,8,9))
#s1.add({1:"a"})  #TypeError: unhashable type: 'dict'  ,dict中的鍵值對(duì)可以改變,set中的元素不能是dict類型
print(s1)

#update()   插入【末尾添加】,打碎插入【直接將元組,列表中的元素添加到set中,將字符串中的字母作為小的字符串添加到set中】
s2 = set([1,2,3,4,5])
print(s2)
s2.update([6,7,8])
s2.update((9,10))
s2.update("good")
#注意:不能添加整型,因?yàn)檎筒荒苁褂胒or循環(huán)遍歷
#s2.update(11)   #TypeError: 'int' object is not iterable
print(s2)
3.2刪除

代碼演示:

#2.刪除
#remove()
s3 = set([1,2,3,4,5])
print(s3)
s3.remove(3)
print(s3)
3.3遍歷

代碼演示:

#3.set的遍歷
s4 = set([1,2,3,4,5])
for i in s4:
    print(i)

#注意:set是沒有索引的,所以不能通過s4[2]獲取元素,原因:set是無序的
#print(s4[2])  #TypeError: 'set' object does not support indexing

#注意:獲取的是編號(hào)和元素值
for i,num in enumerate(s4):
    print(i,num)
3.4交集和并集

代碼演示:

#4.交集和并集
s4 = set([1,2,3])
s5 = set([4,5,3])

#交集:&【按位與】    and
r1 = s4 & s5
print(r1)
print(type(r1))

#并集:|【按位或】   or
r2 = s4 | s5
print(r2)

三、String字符串

1.概述

由多個(gè)字母,數(shù)字,特殊字符組成的有限序列

在Python中,使用單引號(hào)或者雙引號(hào)都可以表示字符串

注意:沒有單符號(hào)的數(shù)據(jù)類型

'a' "a"

2.創(chuàng)建字符串

代碼演示:

str1 = "hello"

str2 = "abc1234"

str3 = "***fhhg%%%"

str4 = "中文"

3.字符串運(yùn)算

代碼演示:

#1.+   字符串連接
s1 = "welcome"
s2 = " to China"
print(s1 + s2)

#注意:在Python中,使用+。只能是字符串和字符串之間。和其他數(shù)據(jù)類型使用的話不支持
#print("abc" + 10)
#print("123" + 1)
#print(1 + "12" + 12)
#print("hello" + True)

#2. *   字符串重復(fù)
s3 = "good"
print(s3 * 3)

#3.獲取字符串中的某個(gè)字符
"""
類似于列表和元組的使用,通過索引來獲取指定位置的字符
注意索引的取值范圍【0~長(zhǎng)度 - 1】,同樣會(huì)出現(xiàn)索引越界
訪問方式:字符串名稱[索引]
"""
s4 = "abcdef"
print(s4[1])
#print(s4[10])  #IndexError: string index out of range

#獲取字符串的長(zhǎng)度:len()
#遍歷字符串,和list,tuple的用法完全相同
for element in s4:
    print(element)
for index in range(0,len(s4)):
    print(s4[index])
for index,str in enumerate(s4):
    print(index,str)

#4.截取字符串【切片】
str1 = "hello world"
#指定區(qū)間
print(str1[3:7])
#從指定位置到結(jié)尾,包含指定位置
print(str1[3:])
#從開頭到指定位置,但是不包含指定位置
print(str1[:7])

str2 = "abc123456"
print(str2[2:5]) #c12
print(str2[2:])  #c123456
print(str2[2::2])  #c246
print(str2[::2])   #ac246
print(str2[::-1])  #654321cba   倒序
print(str2[-3:-1])  #45   -1表示最后一個(gè)字符

#5.判斷一個(gè)子字符串是否在原字符串中
#in  not in
str3 = "today is a good day"
print("good"  in str3)
print("good1"  not in str3)

4.格式化輸出

通過%來改變后面字母或者數(shù)字的含義,%被稱為占位符

? %d 整數(shù)

? %f 浮點(diǎn)型,特點(diǎn):可以指定小數(shù)點(diǎn)后的位數(shù)

? %s 字符串

代碼演示:

#6.格式化輸出
num = 10
string1 = "hello"
print("string1=",string1,"num=",num)
#注意:變量的書寫順序盡量和前面字符串中出現(xiàn)的順序保持一致
print("string1=%s,num=%d"%(string1,num))

f = 12.247
print("string1=%s,num=%d,f=%f"%(string1,num,f))
#需求:浮點(diǎn)數(shù)保留小數(shù)點(diǎn)后兩位
print("string1=%s,num=%d,f=%.2f"%(string1,num,f))    #round(12.247,2)

5.常用轉(zhuǎn)義字符

通過\來改變后面字母或者特殊字符的含義

? \t 相當(dāng)于tab鍵

? \n 相當(dāng)于enter鍵

? \b 相當(dāng)于backspace

代碼演示:

#7.轉(zhuǎn)義字符
string2 = "hello\tworld"
string21 = "hello   world"
print(string2)
print(string21)

#換行:\n    多行注釋
string3 = "hello\nPython"
string31 = """hello
python2354623
"""
print(string3)
print(string31)

#需求:"hello"
print("\"hello\"")

#C:\Users\Administrator\Desktop\SZ-Python1805\Day6\視頻
print("C:\\Users\\Administrator\\Desktop")
#注意;如果一個(gè)字符串中有多個(gè)字符需要轉(zhuǎn)義,則可以在字符串的前面添加r,可以避免對(duì)字符串中的每個(gè)特殊字符進(jìn)行轉(zhuǎn)義
print(r"C:\Users\Administrator\Desktop")

6.常用功能

6.1獲取長(zhǎng)度和次數(shù)

代碼演示:

#1.計(jì)算字符串長(zhǎng)度  len
#類似于list和tuple的中獲取長(zhǎng)度的用法
str1 = "hfufhja"
l = len(str1)
print(l)

#2,計(jì)算某個(gè)字符或者子字符串在原字符串中出現(xiàn)的次數(shù)   count
str2 = "this is a good day good day"
#count(str,[start,end])
#在整個(gè)字符串中進(jìn)行查找
print(str2.count("day"))
#在指定區(qū)間內(nèi)進(jìn)行查找
print(str2.count("day",3,10))
6.2大小寫轉(zhuǎn)換

代碼演示:

#注意:使用字符串中的功能,一般情況下,都是生成一個(gè)新的字符串,原字符串沒有發(fā)生任何變化
#3.大小寫字母轉(zhuǎn)換
#lower()   將字符串中的大寫字母轉(zhuǎn)換為小寫
str31 = "Today Is a Good day"
astr31 = str31.lower()
print(astr31)

#uppper()   將字符串中小寫字母轉(zhuǎn)換為大寫
str32 = "Today Is a Good day"
astr32 = str2.upper()
print(astr32)

#swapcase()     將字符串中小寫字母轉(zhuǎn)換為大寫,大寫字母轉(zhuǎn)換為小寫
str33 = "Today Is a Good day"
astr33 = str33.swapcase()
print(astr33)

#capitalize()   將一句英文中首單詞的首字母轉(zhuǎn)化為大寫,其他小寫
str34 = "today Is a Good day"
astr34 = str34.capitalize()
print(astr34)

#title()       將一句英文中每個(gè)單詞的首字母大寫
str35 = "today is a good day"
astr35 = str35.title()
print(astr35)
6.3整數(shù)和字符串轉(zhuǎn)換

代碼演示:

4.字符串和數(shù)字之間的轉(zhuǎn)換
#int()     float()      str()
#eval(str)   將str轉(zhuǎn)換為有效的表達(dá)式,參與運(yùn)算,并返回運(yùn)算結(jié)果
num1 = eval("123")
print(num1)
#print("123")
print(type(num1))
print(int("123"))

#eval和int將+和-當(dāng)做正負(fù)號(hào)處理
print(eval("+123"))
print(int("+123"))
print(eval("-123"))
print(int("-123"))

#將12+3字符串轉(zhuǎn)換為了有效的表達(dá)式,并運(yùn)算了結(jié)果
print(eval("12+3"))    #15
#不成立
#print(int("12+3"))   #ValueError: invalid literal for int() with base 10: '12+3'

print(eval("12-3"))   #9
#print(int("12-3"))    #ValueError: invalid literal for int() with base 10: '12-3'

#print(eval("a123"))  #NameError: name 'a123' is not defined
#print(int("a123"))  #ValueError: invalid literal for int() with base 10: 'a123'

#總結(jié):注意區(qū)分eval和int【eval:轉(zhuǎn)換有效的表達(dá)式   int:將字符串轉(zhuǎn)換為整型】
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、set集合【了解】 1.概述 和數(shù)學(xué)上的集合基本是一樣的,特點(diǎn):不允許有重復(fù)元素,可以進(jìn)行交集,并集,差集的運(yùn)...
    墨雨love薏雪閱讀 746評(píng)論 0 0
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)。通常情況下,聲明一個(gè)變量只保存一個(gè)值是遠(yuǎn)遠(yuǎn)不夠的,我們需要將一組...
    小黑y99閱讀 65,590評(píng)論 0 9
  • 一、set集合 1.概述 和數(shù)學(xué)上的集合基本是一樣的,特點(diǎn):不允許有重復(fù)元素,可以進(jìn)行交集,并集,差集的運(yùn)算本質(zhì):...
    hollow_02f9閱讀 950評(píng)論 0 0
  • 引流絕學(xué)20集連載之(二十)~~7 大多數(shù)人每天在強(qiáng)行發(fā)廣告推銷自己的產(chǎn)品和項(xiàng)目 其實(shí)你要做的就是用好媒介寫好消費(fèi)...
    夏琿閱讀 245評(píng)論 0 1
  • 第2天·21天告別拖延 #玩卡不卡·每日一抽#每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字?小凱 2、...
    艷敏_c9e0閱讀 160評(píng)論 0 0

友情鏈接更多精彩內(nèi)容