日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python集合运算符_Python 集合、字典、运算符

發(fā)布時間:2025/3/12 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python集合运算符_Python 集合、字典、运算符 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先區(qū)分一下序列類型和散列類型:

序列類型:list、string、tuple,他們中的元素是有序的。

散列類型:set、dict,他們中的元素?zé)o序的。(注意:python3.7.0開始字典變成"有序"了)

序列類型有序,可以用索引。而散列類型中的元素是無序的,所以不能索引。

一、集合

(一).集合的特性:無序、唯一、可變。集合中的元素需要可哈希的,元素不可以是可變對象。

定義一個集合:

(1).工廠方法:se = set()

注意不要寫成 se = () 這樣變成元組了。

(2).直接定義:se = {1,2,3} 用大括號括起來。

大括號中要寫入元素,不寫元素就是一個空字典了。

(3).案例分析:

#分析這兩種定義,哪一個會報錯?

s1 = {1, ['a', 'b', 'c']}

s2= {1, ('a', 'b', 'c')}

第一種會報錯。TypeError: unhashable type: 'list'

因為集合中的元素要符合不可變這個規(guī)則, 列表可變,不符合規(guī)則,報錯了。

第二種,元組不可變,符合規(guī)則,所以解釋器不會跟你叫勁。

至于什么是可哈希?往下翻……

(二).集合的運算

(1).檢查成員:in / not in

語法:item in set_object -> bool

例:

not in 就是取反

(2).交集:&

兩個集合共同有的元素,取兩個集合重復(fù)的元素。

例:

#1.有兩個列表 x = [1,2,3,'a','b','c'] y = ['a','b','c'] 找出x,y列表中,共有元素

x= [1, 2, 3, 'a', 'b', 'c']

y= ['a', 'b', 'c']print(set(x) &set(y))"""列表沒有交集"&"的功能,但是集合有。

那么先工廠一下,然后再交集。

運行結(jié)果:

{'c', 'b', 'a'} # 集合無序,所以元素輸出的順序未必如自己預(yù)想的"""

View Code

為什么運行結(jié)果的順序是亂的?因為集合無序的!

(3).并集:|(shift+回車上面那個)

取出不重復(fù)的值。字面意思理解,并集,并在一起了(相當(dāng)于變成一個集合了,集合的特性之一:元素唯一)。

例:

(4).差集:-

剪掉兩個集合中的重復(fù)部分。

本人數(shù)學(xué)最爛,就這么死記硬背著,第二個集合后面的元素都會砍掉。

(5).與非集:^(脫字符:shift+6)

取兩個集合各自獨有的元素。

(6).小技巧:如何去重元素?

利用集合的特性之一:唯一性

a = [1, 2, 2, 3, "a", "b", "c", "a", "b", "a", 3]

# 工廠一下,set()print(set(a)) # {1, 2, 3, 'c', 'b', 'a'}

(三).集合的常用方法

(1).set.add() 添加單個元素

(2).set.update(iterable) 批量更新,會去重。

二、字典

(一).字典的特性

1.key唯一

2.無序(散列類型,Python3.7.0之前)

3.可變

key是唯一的,需要的是不可變對象,且要符合變量命名規(guī)則。key重名的話,值會被后者所覆蓋。

注意版本之間的區(qū)別,在Python3.7.0之前:字典是無序的(散列類型);從Python3.7.0開始:字典不再是散列類型了,是按照鍵的插入順序進行排列!

4.可以嵌套到任意深度(僅受可用內(nèi)存約束)

(二).定義一個字典

(1).直接大括號:di = {} 是一個空字典

type(di)之后:

注意要與集合的定義區(qū)別開來!定義空集合是:s1 = set()

一般是直接把值寫進去,語法:di = {key1:value,key2:value,...} 鍵值對是冒號的形式

例:

(2).工廠方式:di = dict(key1=value,key2=value,...) 鍵值對用等號"="等起來,工廠方式的key不要加引號!

例:

(3).案例分析:

#分析這兩種定義,哪一個會報錯?

di1 = {'a': 'test', ('a', 'b'): 'test'}

di2= {'a': 'test', {'a', 'b'}: 'test'}

di2會報錯,TypeError: unhashable type: 'set'

key需要是不可變對象。第二種里有一個集合,集合的特性之一是可變,不符合key的規(guī)則,解釋器跟你急了。

而第一種里是一個元組,元組不可變,沒問題了。

另外,內(nèi)建函數(shù)也可以作為字典的key:

d1 = {len: 1, str: "aaa"}print(d1[len]) #1

print(d1[str]) #'aaa'

View Code

(三).往字典里插入值

di ={}#直接賦值一樣

di["name"] = "quanquan616"

"""get(key) 如果key不存在,不會報錯。取到了會返回原有值。

get(key,value) 當(dāng)key不存在的時候,會返回value的值,常用來提示。"""di.get("sex", "沒有這個鍵")"""如果要插入值,可以這么做:

di["name"] = di.get("name","")+"zyb"

di["sex"] = di.get("sex","male")

di["age"] = di.get("age",0)+30

di -> {'name': 'zyb', 'sex': 'male', 'age': 30}"""

"""setdefault(key,value) 字面理解,設(shè)置默認(rèn)。

key有的話會返回原有值,無此key才會設(shè)置。

如果此key已有,不會改變原有值,不會被更新"""di.setdefault("name", "zyb")"""update(dict_object) 參數(shù)需要是一個字典對象。

有就改變,沒有就添加進去。"""di.update({"age": 35, "read": 15})#fromkeys(iterable,value) 批量設(shè)置,所有的值都是一樣的。不會改變原有字典

di.fromkeys("abc", 30)print(di)#{'name': 'quanquan616', 'age': 35, 'read': 15}

View Code

(四).對字典進行取值

#直接用鍵進行取值,Dict[key]

print(di["name"]) #quanquan616

#get(key) 取到了就返回值,沒有取到不會報錯

print(di.get("name")) #quanquan616

#get()的另一種用法

di ={}

di["name"] = di.get("name", "") + "zyb"

print(di) #{'name': 'zyb'}

#setdefault(key) 有就返回這個鍵的值。如果沒有這個鍵,會創(chuàng)建,不指定值的話,會是None。不會因為指定了值而改變原有數(shù)據(jù)。

print(di.setdefault("name")) #quanquan616

#values() 取出所有的值,返回一個迭代器

print(di.values()) #dict_values(['quanquan616', 35, 15])

View Code

(五).changed in python3.7.0

官方文檔對python3.7.0中字典的描述:

Dictionary order is guaranteed to be insertion order.Dictionaries preserve insertion order.

Note that updating a key does not affect the order.Keys added after deletion are inserted at the end.

大意:字典保留的順序是鍵插入的順序,更新值不會影響原有的順序,但刪除后添加的鍵將在末尾插入。

演示如下:

(六).字典小技巧(以下代碼均在python3.7.0中運行)

(1).對字典中的元素進行排序

di = {"in": 123, "to": 511, "she": 255, "i": 111}print(sorted(di.items(), key=lambda item: item[1], reverse=True))#運行結(jié)果:[('to', 511), ('she', 255), ('in', 123), ('i', 111)]

"""di.items() 將字典轉(zhuǎn)化為可迭代對象。Dict.items()將字典中的key-value元素,轉(zhuǎn)化為了元組

# [('in', 123), ('to', 511), ('she', 255), ('i', 111)]

key=lambda item: item[1] 取元素中的第二個元素作為比較的參數(shù)"""

key是用來指定做排序的每項元素的那個部分。匿名函數(shù)的item,就是指代每項元素,item[1]就是元素的第二項的意思。

注意此方法中,value的值只能是數(shù)值,如果出現(xiàn)字符串就會報錯。(字符串和數(shù)值能直接做比較嗎?)

(2).對列表中的多個字典排序

#按age從大到小排序

alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}]

alist.sort(key=lambda item: -item.get("age"))"""key中的lambda表達,等價于下面這種方式。

獲得字典中"age"的值,key的意思是以哪個函數(shù)為關(guān)鍵字。"""

#def get_sort(li):#return li.get("age")#alist.sort(key=get_sort, reverse=True)

print(alist)#[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]

View Code

(3).合并字典(鍵相同則覆蓋)

x = {"a": 1, "b": 2}

y= {"b": 3, "c": 3, "d": 4}

z= {**x, **y}print(z)#{'a': 1, 'b': 3, 'c': 3, 'd': 4}

View Code

(4).字典代替多個if...elif

如下這段if...elif...else語句:

deffun(x):if x == "a":return 1

elif x == "b":return 2

else:return None

View Code

可以寫成更加簡潔更加pythonic的代碼:

deffun(x):return {"a": 1, "b": 2}.get(x)

dict.get() 如果get不到值會返回None

(5).dict.pop()方法從字典中刪除條目。但是,傳遞給pop()中的參數(shù),必須是字典中存在的鍵,而不是值。

三、運算符(部分簡單的運算符之前已有摘錄,不在這里重復(fù)了,遇到實際情況不會了直接google it)

(一).身份運算符:is / is not

兩個對象,是否指向同一個id。(id和內(nèi)存地址還是有區(qū)別的)

注意區(qū)分"=="和"is":

==用來判斷兩個值是否相等,is是判斷兩個對象的id是否相同。

(二).邏輯運算符 not > and > or

四、哈希

hash(object)生成一個唯一的哈希值。

小技巧:這個內(nèi)置函數(shù),可以來判斷一個對象是否是可變的。能生成哈希值的就是不可變對象。

總結(jié)

以上是生活随笔為你收集整理的python集合运算符_Python 集合、字典、运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。