python 數據結構

一. 深入鏈表

先來介紹一些鏈表具備的一些常用方法:

append(x) : 把一個元素添加到鏈表的結尾

extend(L) : 將另外一個鏈表合并到該鏈表中

insert(i,x) : 插入一個元素到指定位置的前面

remove(x) : 刪除鏈表中第一個值為x的元素 如果沒有這樣的元素 則返回錯誤

pop([i]) : 刪除鏈表中索引為i的元素,并將其返回,如果索引i大于鏈表的最大索引,則返回錯誤,如不提供索引,則刪除并返回最后一個元素

index(x) : 返回鏈表中第一個值為x的元素的索引

count(x) : 返回x在鏈表中出現的次數

sort() : 對鏈表中的元素就地排序??? # 就地的意思就是ruby中以!結尾的函數

reverse() : 就地倒排

?

1. 如何把鏈表當作堆棧使用

堆棧的特點是先進后出,使用append()壓入,使用pop()彈出

?

2. 如何把鏈表當作隊列使用

隊列的特點是先進先出,使用append()將一個對象排到隊尾,使用pop(0)將第一個對象拉出

?

3. 函數化編程工具

對于鏈表來說,有三個函數作用很大:

(1) filter(function, list)

這個函數是過濾函數,返回list中所有經過function函數運算后返回值為true的元素鏈表。

如:

1?ls?=?[1,2,3,4]
2?ls2?=?filter(lambda?x:x>1,ls)
3?print?ls???#[1,2,3,4]
4?print?ls2??#[2,3,4]

注意,filter函數不是一個就地處理函數,而是返回執行結果。

?

(2) map(function, list)

這個函數是依次處理函數,使用function函數依次對list中的元素進行計算,將計算結果們組成一個鏈表返回。

?

(3) reduce(function, list)

1?reduce(?lambda?x,y:x+y,?range(1,5)?)#?返回10??因為?[1,2,3,4]??1+2=3?3+3=6?6+4=10
2?
3?

該函數極少應用,可以忽略不看。

?

4. 鏈表推導式

就是在一個表達式或一個函數中后綴if或for語句,然后推導出一個鏈表,如:

1?[x*2?for?x?in?range(10)]?#?[0,2,4,6,8,10,12,14,16,18]
2?["lee:"+s?for?s?in?['hi','hallo']]?#?["lee:hi",?"lee:hallo"]
3?[(lambda?x:x*2)(x)?for?x?in?range(10)]?#?結果同第一句?只不過第一句用了表達式?該句用函數

?

二. del語句

作用是刪掉指定列表元素,可以刪掉指定切片部分的元素。

1a?=?range(5)
2del?a[0]?#?[1,2,3,4]
3del?a[1,3]?#[1,4]
4del?a?#刪除變量

?

?

三. 元組和序列

元組也是一個復合數據結構,可以將多個元素組織在一起,但不能改變其中某個元素的值。

元組是用()括起來的。

構建空元組的時候直接使用? x = () 即可

構建單元素的元組時要使用 x=1, 或者x=(1,)? 只有一個括號是不行的。

?

四. Sets集合

?sets集合的主要作用是:

可以對列表進行“與運算”,得到兩個列表中共有的元素。

可以對列表進行“或運算”,得到兩個列表擁有的所有元素。

可以對列表進行“異或運算”,得到兩個列表互相沒有的元素。

可以對列表進行“減運算”,可以從一個列表中排除另一個列表擁有的元素。

獲取一個set集合的方法是使用 set() 函數。如:

1?s1?=?set(range(0,5))?#?([0,1,2,3,4])
2?s2?=?set(range(3,8))?#?([3,4,5,6,7])
3?s1?-?s2?#([0,1,2])
4?s1?|?s2?#([0,1,2,3,4,5,6,7])
5?s1?&?s2?#([3,4])?
6?s1?^?s2?#([0,1,2,5,6,7])

?

五. 字典

字典就是hash表,是以鍵值來保存的,鍵必須是不可變的,一般是字符串或者數字,也可以是只包含字符串或數字的元組,假如元組中包含了可變對象,那該元組不能作為鍵。

1?a?=?(1,)
2?hash?=?{a:a}
3?hash[a]?=?1?#ok
4?a?=?1?#ok
5?print?hash?#{(1,):1}

可以用del來刪除一個? 鍵/值?? 如果對已存在的鍵賦值,會覆蓋該鍵的值。

可使用keys()方法返回鍵的列表,

可使用has_key()方法來查詢是否含有一個鍵。

?

六. 循環技術

在字典循環時,關鍵字和對應的值可以用iteritems()方法同時讀出來。

1?h?=?{1:1,?2:2}
2?for?k,v?in?h.iteritems():
3??print?k,v
4?
5?

?

在序列中循環時,索引位置和對應值可以使用enumerate()函數同時讀出來。

1?for?i,v?in?enumerate(['a','b','c'])
2??print?i,v
3
4

?

同時循環多個序列,可以使用zip()整體解讀。

1?a?=?[1,2,3]
2?b?=?[2,4,6]
3?for?v1,v2?in?zip(a,b):
4??print?v1,v2

?

需要逆向循環序列,需要先正向定位序列,再調用reversed()函數。

1?for?i?in?reversed(range(1,100))
2??print?i
3?
4?

?

要按排序后的序列循環,可以使用sorted()先排序

1?for?i?in?sorted([1,3,2,5,9,7])
2??print?i
3?
4?

轉載于:https://www.cnblogs.com/coderlee/archive/2008/09/10/1288376.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276818.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python筆試編程題_Python——面試編程題

一、python----輸出1-100之和的方法 方法一: print(sum(range(1,101))) 方法二: from functools import reduce print(reduce(lambda x, y: xy, range(101))) 方法三: t0 for i in range(101): ti print(t) 方法四: print(sum([x for x in ra…

go語言項目優化(經驗之談)

1 Go的應用場景 在斗魚我們將GO的應用場景分為以下三類,緩存類型數據,實時類型數據,CPU密集型任務。這三類應用場景都有著各自的特點。 ● 緩存類型數據在斗魚的案例就是我們的首頁,列表頁,這些頁面和接口的特點是不同…

AddTransient、AddSingleton、AddScoped 三者都應該在什么場景下使用

網上隨便一搜,能搜出一大堆對三者進行區別分析的文章,但是呢,理論是一回事,實際使用又是另外一回事,到底在何種場景下應該使用何種注入方式呢? 通過這篇文章和我自身的實際經驗,來說一說實際應用…

python交互界面用圖片當背景_wxPython實現窗口用圖片做背景

本文實例為大家分享了wxPython實現窗口用圖片做背景的具體代碼,供大家參考,具體內容如下 效果圖:實現代碼: #!/usr/bin/env python # -*- encoding:utf-8 -*- import wx class MyPanel(wx.Panel): def __init__(self,parent,id): …

css超出隱藏顯示省略號

width: 300px; overflow: hidden;/*超出部分隱藏*/ text-overflow:ellipsis;/* 超出部分顯示省略號 */ white-space: nowrap;/*規定段落中的文本不進行換行 */ 轉載于:https://www.cnblogs.com/songmengwen1124/p/11354620.html

信號為E時,如何讓語音識別脫“網”而出?

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊教育云發表于云社區專欄 一般沒有網絡時,語音識別是這樣的 ▽ 而同等環境下,嵌入式語音識別,是這樣的 ▽ 不僅可以幫您邊說邊識、出口成章,有個性化…

TwinSocketStream

使用TwinSocketStream 當為一個blocking連接實現一個線程時,你必須確定在連接的另一端的socket是準備寫還是讀.Blocking連接不會通知socket當它準備好寫或讀操作的時候.想看看連接是否準備好,使用TWinSocketStream對象.TWinSocketStream提供一個方法去幫助調整讀或寫操作時間的…

c 字符串轉數字_C語言實現十進制轉216進制、十六進制轉十進制

1、十進制轉2~16進制【問題描述】從鍵盤輸入十進制整數num及轉換的進制數base,將整數num轉換為base進制(base取值范圍為 2~16)。方法為:十進制數除base取余法,即十進制數除以base,余數為權位上的數&#xf…

Mysql循環語句,死循環解決辦法

delimiter // #定義標識符為雙斜杠 drop procedure if exists test; #如果存在test存儲過程則刪除 create procedure test() #創建無參存儲過程,名稱為testbegindeclare i int; #申明變量set i 0; …

QML-關于Qt.rgba()顏色無法正常顯示問題

GitHub:八至 作者:狐貍家的魚 本文鏈接:關于Qt.rgba()顏色的正確寫法 當在正常給color屬性寫顏色的時候,用十六進制能正常顯示,但是用Qt.rgba()時,顏色無法正常顯示出來。 按照文檔的正常寫法: color: Qt.r…

一個簡單的LINQ TO XML, AJAX 例子[譯]

這個教程是用Visual Studio.net 2008建立,也可以使用VS2005,但你需要從這里下載安裝Microsofts ASP.NET AJAX Extensions,AJAX和LINQ是微軟目前主要焦點,兩個看上去不足為奇,但背后都隱藏著巨大的潛力和力量。在這個示…

1.ASP.NET Core介紹

優點: 1.跨平臺,高性能,開源,運行在.Net Core 或.Net Framework框架上(asp.net core 3.0及以后只支持.Net Core)。 2.各平臺上開發工具支持,能夠開發web應用,webapi,移動…

python3性能還低嗎_Python3 vs. Python2 大作戰,誰將是性能之王?

渲染 HTML 模板 django_html 測試將使用 Django 模板渲染引擎來構建一個 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 類。如圖所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版本都沒有 Pyth…

python day08

一 文件處理補充 控制文件中光標移動 1 f.read(n): l.文件打開方式為文本模式的時,代表讀取N個字符 ll.文件打開方式為b模式時,讀取N個字節 強調:只有在read(n)模式下 N代表字符個數,除此之外的是以字節為單位 2 f.seek(): 光標移動是以字節為單位的整數移動. 三種模式:(分別為…

百度地圖移動端開發和ArcGIS for Android 開發入門

打開鏈接http://pan.baidu.com/s/1eQpFNWY,可以查看 轉載于:https://www.cnblogs.com/David-Young/p/3827058.html

VSCode 小雞湯 第00期 —— 安裝和入門

簡介 這將是一個新的系列,將會以 Visual Studio Code(后文都簡稱為 VSCode 啦)的操作,環境配置,插件介紹為主,為大家不定期的介紹 VSCode 的一些操作技巧,所以取名 VSCode 小雞湯,本…

.net生成文字圖片

System.Drawing.Bitmap bmpnew Bitmap(Bitmap.FromFile(Server.MapPath("42.jpg")));//載入圖片 System.Drawing.Graphics gGraphics.FromImage(bmp); g.DrawString("abcd測試",new Font("黑體",18),new SolidBrush(Co…

python可以調用windows資源嗎_如何在Windows上用Python調用WinRar?還有問題嗎

使用zipfile模塊,我創建了一個腳本來提取我的歸檔文件,但是這個方法會破壞除txt文件之外的所有內容。在def unzip(zip): filelist [] dumpfold rM:\SVN_EReportingZones\eReportingZones\data\input\26012012 storage rM:\SVN_EReportingZones\eRepor…

SQLServer、Mysql、Oracle 創建、刪除用戶和授予用戶權限

SQLServer 1、創建用戶 CREATE LOGIN [用戶名稱] WITH PASSWORD用戶密碼, DEFAULT_DATABASE[默認數據庫名稱], CHECK_EXPIRATIONOFF, CHECK_POLICYOFF GO USE [數據庫名稱] GO CREATE USER [用戶名稱] FOR LOGIN [用戶名稱] WITH DEFAULT_SCHEMA[dbo] GO 2、授予全庫只讀權限 A…

一次緩存性能問題排查

概述以下分享的都跳過了很多坑,包括redis、tomcat環境配置、機器硬件配置等等問題(與線上保持一致,或者硬件性能減配系數,例如線上:8C16G,壓測:4C8G,系數簡單相差2倍)&am…