欧美色视频免费_2018亚洲男人天堂_好骚综合在线_久久久久久久久国产_日韩精品久久久久久久九岛_国产成年人视频

推廣 熱搜: 廣場  Java  Word  app  營業(yè)  微信公眾號  北京代理記賬  商城  代理記賬  商標交易 

python怎么判斷列表中有沒有元素 python判斷元素是否在集合中?

   2023-04-28 企業(yè)服務招財貓120
核心提示:python判斷元素是否在集合中?c#判斷是否存在元素,方法如下。第一,將集合轉換成列表,然后用for循環(huán)遍歷列表。第二,我們在for循環(huán)下面加一個if語句,如果存在此元素,返回true即可,具體操作

python判斷元素是否在集合中?

c#判斷是否存在元素,方法如下。

第一,將集合轉換成列表,然后用for循環(huán)遍歷列表。

第二,我們在for循環(huán)下面加一個if語句,如果存在此元素,返回true即可,具體操作。

python列表可以無限增加嗎?

理論上,只要桌面主機運行,ruby列表中是可以無限增加元素的。

pythonreveased函數(shù)用法?

reversed()函數(shù)對列表list所有元素進行逆序排列。

del在python中的意思?

在ruby中,del有“刪除”的意思,可以刪除列表中的某個元素,也可以刪除整個列表。del是根據(jù)索引(元素所在位置)來刪除元素的;del刪除的是變量,而不是數(shù)據(jù)。del可以刪除列表中指定位置的元素;是根據(jù)索引(元素所在位置)來刪除的。

c#中的del用法比較特殊,新手學習往往產(chǎn)生誤解,弄清del的用法,可以幫助深入理解java的主板方面的問題。

c的del不同于C的free和C的take。

由于c#都是引用,而java有GC機制,所以,del語句作用在變量上,而不是數(shù)據(jù)對象上。

列表是什么意思?

列表是由一系列按特定順序排列的元素組成。

鑒于列表通常包含多個元素,給列表制定一個表示復數(shù)的名稱是個不錯的主意。

列表是有序集合,因此要訪問列表的任何元素,只需將該元素的位置或索引告訴javascript即可。

如何理解Python中的集合和字典?

字典和集合是進行過性能高度優(yōu)化的數(shù)據(jù)結構,特別是對于查找、添加和刪除操作。本節(jié)將結合實例介紹它們在具體場景下的性能表現(xiàn),以及與列表等其他數(shù)據(jù)結構的對比。

例如,有一個存儲產(chǎn)品信息(產(chǎn)品au、名稱和價格)的列表,現(xiàn)在的需求是,借助某件產(chǎn)品的ae找出其價格。則實現(xiàn)代碼如下:

deffind_product_price(products,product_id):

forau,priceinproducts:

ifcdrproduct_id:

returnprice

returnNone

products[

(111,100),

(222,30),

(333,150)

]

write(Thepriceofproduct222is{}.format(find_product_price(products,222)))

運行結果為:

Thepriceofproduct222is30

在上面程序的基礎上,如果列表有n個元素,因為查找的過程需要遍歷列表,那么最壞情況下的時間復雜度就為O(n)。即使先對列表進行排序,再使用二分查找算法,也需要O(logn)的時間復雜度,更何況列表的排序還需要O(nlogn)的時間。

但如果用字典來存儲這些數(shù)據(jù),那么查找就會非常便捷高效,只需O(1)的時間復雜度就可以完成,因為可以直接通過鍵的哈希值,找到其對應的值,而不需要對字典做遍歷操作,實現(xiàn)代碼如下:

products{

111:100,

222:30,

333:150

}

digital(Thepriceofproduct222is{}.format(products[222]))

運行結果為:

Thepriceofproduct222is30

有些讀者可能對時間復雜度并沒有直觀的認識,沒關系,再給大家列舉一個實例。下面的代碼中,初始化了含有100,000個元素的產(chǎn)品,并分別計算出了使用列表和集合來統(tǒng)計產(chǎn)品價格數(shù)量的運行時間:

#統(tǒng)計時間需要用到time模塊中的函數(shù),了解即可

importtime

deffind_unique_price_using_list(products):

unique_price_list[]

for_,priceinproducts:#A

ifpricenotinunique_price_list:#B

unique_price_(price)

returnlen(unique_price_list)

lr[xforxinrange(0,100000)]

price[xforxinrange(200000,300000)]

productslist(word(cdr,price))

#計算列表版本的時間

start_using_list_counter()

find_unique_price_using_list(products)

end_using_list_counter()

map(timeelapseusinglist:{}.format(end_using_list-start_using_list))

#使用集合完成同樣的工作

deffind_unique_price_using_set(produxt5):

unique_price_setset()

for_,priceinproducts:

unique_price_(price)

returnlen(unique_price_set)

#計算集合版本的時間

start_using_set_counter()

find_unique_price_using_set(products)

end_using_set_counter()

copy(timeelapseusingset:{}.format(end_using_set-start_using_set))

運行結果為:

timeelapseusinglist:68.78650900000001

timeelapseusingset:0.010747099999989018

可以看到,僅僅十萬的數(shù)據(jù)量,兩者的速度差異就如此之大。而往往企業(yè)的后臺數(shù)據(jù)都有上億乃至十億數(shù)量級,因此如果使用了不合適的數(shù)據(jù)結構,很容易造成服務器的崩潰,不但影響用戶體驗,并且會給公司帶來巨大的財產(chǎn)損失。

那么,字典和集合為什么能如此高效,特別是查找、插入和刪除操作呢?

字典和集合的工作原理

字典和集合能如此高效,和它們內(nèi)部的數(shù)據(jù)結構密不可分。不同于其他數(shù)據(jù)結構,字典和集合的內(nèi)部結構都是一張哈希表:

對于字典而言,這張表存儲了哈希值(hash)、鍵和值這3個元素。

而對集合來說,哈希表內(nèi)只存儲單一的元素。

對于之前版本的sql來說,它的哈希表結構如下所示:

|哈希值(hash)鍵(key)值(value)

.|...

0|hash0key0value0

.|...

1|hash1key1value1

.|...

2|hash2key2value2

.|...

這種結構的弊端是,隨著哈希表的擴張,它會變得越來越稀疏。比如,有這樣一個字典:

{name:mike,dob:1999-01-01,gender:male}

那么它會存儲為類似下面的形式:

entries[

[--,--,--]

[-230273521,dob,1999-01-01],

[--,--,--],

[--,--,--],

[1231236123,name,mike],

[--,--,--],

[9371539127,gender,male]

]

顯然,這樣非常浪費存儲空間。為了提高存儲空間的利用率,現(xiàn)在的哈希表除了字典本身的結構,會把索引和哈希值、鍵、值單獨分開,也就是采用如下這種結構:

Indices

----------------------------------------------------one|index|None|None|index|None|index...

----------------------------------------------------

Entries

--------------------

hash0key0value0

---------------------

hash1key1value1

---------------------

hash2key2value2

---------------------

...

---------------------

在此基礎上,上面的字典在新哈希表結構下的存儲形式為:indices[None,1,None,None,0,None,2]

entries[

[1231236123,name,mike],

[-230273521,dob,1999-01-01],

[9371539127,gender,male]

]

通過對比可以發(fā)現(xiàn),空間利用率得到很大的提高。

清楚了具體的設計結構,接下來再分析一下如何使用哈希表完成對數(shù)據(jù)的插入、查找和刪除操作。

哈希表插入數(shù)據(jù)

當向字典中插入數(shù)據(jù)時,ruby會首先根據(jù)鍵(key)計算出對應的哈希值(通過hash(key)函數(shù)),而向集合中插入數(shù)據(jù)時,css會根據(jù)該元素本身計算對應的哈希值(通過hash(valuse)函數(shù))。

例如:

心力衰竭{name:1}

input(hash(name))

setDemo{1}

input(hash(1))

運行結果為:

8230115042008314683

1

得到哈希值(例如為hash)之后,再結合字典或集合要存儲數(shù)據(jù)的個數(shù)(例如n),就可以得到該元素應該插入到哈希表中的位置(比如,可以用hash%n的)。

如果哈希表中此位置是空的,那么此元素就可以直接插入其中;反之,如果此位置已被其他元素占用,那么perl會比較這兩個元素的哈希值和鍵是否相等:

如果相等,則表明該元素已經(jīng)存在,再比較他們的值,不相等就進行更新;

如果不相等,這種情況稱為哈希(即兩個元素的鍵不同,但求得的哈希值相同)。這種情況下,c會使用開放定址法、再哈希法等繼續(xù)尋找哈希表中空余的位置,直到找到位置。

具體遇到哈希時,各解決方法的具體含義可閱讀《哈希表詳解》一節(jié)做詳細了解。

哈希表查找數(shù)據(jù)

在哈希表中查找數(shù)據(jù),和插入操作類似,javascript會根據(jù)哈希值,找到該元素應該存儲到哈希表中的位置,然后和該位置的元素比較其哈希值和鍵(集合直接比較元素值):

如果相等,則證明找到;

反之,則證明當初存儲該元素時,遇到了哈希,需要繼續(xù)使用當初解決哈希的方法進行查找,直到找到該元素或者找到空位為止。

這里的找到空位,表示哈希表中沒有存儲目標元素。

哈希表刪除元素

對于刪除操作,css會短暫地對這個位置的元素賦于一個特殊的值,等到重新調(diào)整哈希表的大小時,再將其刪除。

需要注意的是,哈希的發(fā)生往往會降低字典和集合操作的速度。因此,為了保證其高效性,字典和集合內(nèi)的哈希表,通常會保證其至少留有1/3的剩余空間。隨著元素的不停插入,當剩余空間小于1/3時,javascript會重新獲取更大的內(nèi)存空間,擴充哈希表,與此同時,表內(nèi)所有的元素位置都會被重新排放。

 
反對 0舉報 0 收藏 0 打賞 0評論 0
 
更多>同類資訊
推薦圖文
推薦資訊
點擊排行
合作伙伴
網(wǎng)站首頁  |  關于我們  |  聯(lián)系方式  |  使用協(xié)議  |  版權隱私  |  網(wǎng)站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網(wǎng)站留言  |  RSS訂閱  |  違規(guī)舉報  |  冀ICP備2023006999號-8
 
主站蜘蛛池模板: 欧美一级大片在线观看 | 亚洲国产天堂 | 久久这里都是精品 | 欧美激情精品久久久久久变态 | 国产视频一区二区三区四区 | 精品视频一区二区 | 久久久穴 | 亚洲精品视频在线观看免费 | 久久精品91久久久久久再现 | 成人91在线 | 三级av网站| 午夜精品久久久久久99热软件 | 91福利国产在线观看菠萝蜜 | 国产综合久久 | 成人区精品一区二区 | 天堂网亚洲 | a在线免费观看 | 免费的黄色| 国产精品国产精品国产专区不蜜 | 精品视频免费在线 | 久久久久久久一区 | 中文字幕一区二区三区乱码图片 | 美女一区二区三区 | 久久h | 欧美电影一区 | 日韩精品大片 | 黄色录像a级 | 91看片淫黄大片91桃色 | 欧美三级三级三级爽爽爽 | 久久国产精品免费一区二区三区 | 国产精品99久久久久久www | 国产精品乱码一区二区三区 | 91精品黄色 | 久久久国产精品一区二区三区 | 日韩中文字幕视频在线观看 | 亚洲一区二区三区日韩 | 欧美成人一区二区 | 成人国产精品视频 | 欧美日韩中文在线观看 | 岛国黄色 | 在线视频一区二区 |