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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python列表添加字符串_2.python基础之—列表,元组,字典,集合,字符串的使用方法...

發布時間:2024/7/23 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python列表添加字符串_2.python基础之—列表,元组,字典,集合,字符串的使用方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.關于python序列的簡介。

python里面的序列大部分都可以執行,索引,切片,加,乘,檢查長度,以及檢查某個成員是否存在,甚至還可以找出這個序列中最小的元素和最大的元素,并且序列都是可迭代的。

解釋下個人理解的迭代,迭代(iteration),序列中的迭代就是對序列中的每個元素重復執行某些操作/

具體的迭代方式后面會說到。

下面就說說python序列的共有特點。

1.索引

一個序列中,所有的元素都有自己的編號,這個編號是從0開始的,這個編號就是所謂的索引,這些元素可以通過索引來依次訪問。下面就拿字符串類型舉個例子,字符串在python中也是序列的一種。

test = "suhaozhi"

print test[0] (打印序列中的第一個元素,也就是打印字符串的第一個字符。)

s

根據上面的示例就可以看出,python中的字符串就是由字符組成的序列,索引0指向了序列中的第一個元素,在這個例子中就是s。

python中幾乎所有的序列都可以使用這種索引,如果索引是負數時,python會從右邊,也就是最后一個元素開始計數,如果想直接取序列中最后一個元素的話,可以直接使用-1。

test = "suhaozhi"

print test[-1]

i

2.分片

如果說索引一次只能訪問序列中的一個元素,那么分片就可以通過索引一次訪問序列中的一段(一個范圍的)元素。

分片操作通過冒號隔開兩個索引來實現。

假如說現在定義了一個變量,這個變量里是個字符串,字符串的內容是www.baidu.com,現在要通過分片取出前面的三個字符‘www’,操作方法如下。

url = 'www.baidu.com'

print url[0:3]

www

第一個索引“0”是要提取的第一個元素編號(開頭)而最后一個索引“3”責是分片之后!剩余部分!的第一個元素號。

分片操作的視線是需要兩個索引作為邊界,第1個索引的元素是包含在分片內的,第二個不包含在分片內。

那么假如說這個字符串的長度未知,我只想取最后三個字符,該如何操作呢?

print url[-3:]

com

如果分片獲取到的部分需要包括結尾的元素,那么后面的索引就需要為空。

這種方法也可以用在開始的元素上。

url = 'www.baidu.com'

print url[:3]

www

3.分片之步長。

在對序列進行分片的時候,開始和結束都需要指定,而另一個參數“步長”,這個參數是隱藏的,默認值是1,我們的分片操作就是按照步長來逐個遍歷序列中的元素,然后返回開始和結束點之間所有的元素。

比如說以下面這個列表為例:

我們對下面這個列表做一個分片操作。

l1 = [1,2,3,4,5,6,7,8,9,10]

現在要取這個列表中的1到9。

print l1[0:9:1]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

其中0:9:1前面的0:9前面已經解釋過了,是開始和結束的位置,最后一個1就是步長參數,不管這個參數寫不寫,默認就是1。

如果步長被設置為比1大的數,那么就會跳過某些元素,比如說將步長設置為2,就會出現以下效果。

l1 = [1,2,3,4,5,6,7,8,9,10]

print l1[0:9:2]

[1, 3, 5, 7, 9]

每取一個元素都會跳過一個元素。

補充一點!:步長不可以為0,但是可以為負數!如果步長設置為負數,那么就會從右向左開始取元素。

l1 = [1,2,3,4,5,6,7,8,9,10]

print l1[::-1]

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

如果說開始的元素包括在結果之中,結束的元素,不能在分片之內,當使用一個負數作為步長的時候,開始的索引節點必須大于結束的索引!!!!對于一個正數的步長,python會從序列的頭部(左)向右開始提取元素,但是對于負數的步長,則是從序列的尾部(右)開始向左提取元素!!所以說,如果要使用負數作為步長,那么開始的索引要大于結束的索引。

4.序列之間的相加。

相同類型的序列之間是可以合并拼接起來的,只要通過+加號就可以做到。

比如說現在拼接兩個列表。

print [1,2,3] + [4,5,6]

[1, 2, 3, 4, 5, 6]

這樣,兩個相同類型的序列就拼接起來了。

字符串也是如此。

print "hamasaki" + "ayumi"

hamasakiayumi

不過需要注意,不同類型的序列是不可以拼接在一起的,比如說列表和字符串,雖然說都是序列,但是它們屬于不同的類型!!!

5.關于序列與乘法。

用數字去乘以一個序列,會生成一個新的序列,在新的序列中,原來的序列會被重復n次。

比如說:

print "suhaozhi" * 5

suhaozhisuhaozhisuhaozhisuhaozhisuhaozhi

suhaozhi被重復了5遍。

print '*' * 50

**************************************************

*號被重復了50遍。

這事關于字符串的示范,列表也是一樣。

print [1,2,3] * 10

[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

那么這種蛋疼的序列乘法永在什么位置呢?

個人理解,這種序列乘法可以用來占用序列里面元素的空間,也就是初始化,創建一個空列表[]可以用中括號來表示,但是這個列表中什么都沒有,假如說這時需要創建一個占用是個元素的空間,但是這個列表中不能有任何內容(每個元素必須是空值),這時候序列乘法就可以發揮作用了。

每個元素都需要為空,就意味著列表不可以有任何元素,這種情況就需要使用None了,None是python的內建值,就是什么都沒有的意思,因此,如果想要初始化一個長度為10的列表,但是這個列表中什么都不可以放,就可以使用下面的例子來實現。

test = [None] * 10

print test

[None, None, None, None, None, None, None, None, None, None]

6.檢查某個成員在序列中是否存在。

檢查一個元素是否在指定的序列中,可以使用in來進行檢測(關于in運算符,在前面的運算符介紹中講過了,可以查看前面的文章~),當要檢查的元素存在于這個序列中,責返回True否則返回False,下面是使用in來檢查元素是否存在于序列的例子。

比如說檢查linux/unix文件的權限(rwx)。

permissions = ''rw"

print 'w' in permissions

True

在說一個通俗易懂的例子,檢查一個用戶的名字是否在列表上。l1 = ['linhaifeng','suhaozhi','andy']

print "suhaozhi" in l1

True

名字存在于列表中就返回了True。接著在查一個列表中沒有的。l1 = ['linhaifeng','suhaozhi','andy']

print "ayumi"

沒有的元素,就直接返回了一個False

7.計算序列長度,取出序列中的最大元素和最小元素。

python中內置了len(),min(),max()這三個特別有用的函數,其中len函數可以返回序列中元素的數量,也就是這個序列的長度,min可以返回這個序列中最小的元素,max則可以返回這個序列中最大的元素。

下面演示下這三個常用函數的用法。Username = ["linhaifeng","suhaozhi","andy","tony"]

現在有個列表,需要計算這個列表中有多少個元素。print len(Username)

4

最后返回的結果是4,就說明這個列表中有4個元素。

計算序列長度的這個函數還可以永在字符串上,因為字符串也是序列的一種啊。print len("Hello")

5

返回的結果是5,就說明這個字符串中有5個字符。

len說完了,在簡單演示min和max函數。test = [1,2,3,4,5,6]

min(test)

1

查找test這個列表中最小的元素,這個最小的元素就是1。

再試試max函數。test = [1,2,3,4,5,6]

max(test)

6

min和max函數,一般情況下,用來查找序列中的數字,如果是英文字符串的話,是按照首字母排序去進行查找的。

補充!:在這補充一點,min和max函數不只可以用于單個序列中找出最大值和最小值,這兩個函數可以同時接收多個參數,在多個參數中找出最大值和最小值。print min(1,2,3,4,5,6)

1print max(1,2,3,4,5,6)

6

二.細說python列表(list)。

基本序列所具有的功能,列表都具備,索引,分片,連接,乘法列表都可以,和字符串不同的是,列表是可以修改的,列表支持,添加元素,插入元素, 刪除元素,甚至還可以分片賦值,然而前面說的那些列表支持的功能,字符串都不能做。

1.修改列表中的元素。

想要修改列表中的某個元素,需要借助元素的索引才可以去修改,想去修改一個元素,必須明確這個元素的位置,索引。test_list = ["aaa","bbb","ccc"]

假如說,現在要給上面那個列表中的第0個元素“aaa”替換為“suhaozhi”,下面就是操作方法。test_list[0] = "suhaozhi"

print test_list

['suhaozhi', 'bbb', 'ccc']

這個列表中的第0個元素就被成功修改為“suhaozhi”了。

2.列表之分片賦值。

個人覺得列表的分片賦值功能做的特別的屌,分片賦值就是把修改列表中元素和分片聯合起來使用。

前面介紹了,字符串雖然也是序列的一種,但是字符串這種序列是不支持修改的,那怎么讓這種序列變得可以修改呢?這個時候就可以用到列表的分片賦值功能,其實分片賦值就是通過索引分片,然后在通過索引去修改列表中的元素,下面來做個演示~~name = "perl"

首先我們定義了一個變量,這個變量中存的是個字符串“perl”,現在要對這個字符串序列的最后三個字母進行修改,把這個字符串變成python,操作方法如下。name = list("perl")

#首先使用list()工廠函數,將perl這個字符串強制轉換成列表的格式,轉換后,我們先在屏幕上輸出下這個轉換后的列表看看。print name

['p', 'e', 'r', 'l']

轉換成功后,通過之前說的分片和索引,去修改列表中的元素。name[1:] = list("ython")

print name

#然后我們來打印一下這個列表看下。

['p', 'y', 't', 'h', 'o', 'n']

#列表中的元素已經替換完成了,接下來需要做的就是,使用join()方法,把列表中的每個元素合并為一個字符串。print "".join(name)

python

3.刪除一個元素。

從列表中刪除一個元素,可以使用del語句來實現。test_list = ["aaa","bbb","ccc"]

現在需要刪除這個列表中的第二個元素(從第0個開始數)。del test_list[2]

print test_list

['aaa', 'bbb']

第二個元素“ccc”就被刪掉了。

關于del語句~在這里需要特別補充一下!!

del語句不只可以刪除列表中的元素,甚至還可以刪除其他元素,還可以刪除變量!!

4.python中列表中常用方法介紹。

在介紹列表的常用方法之前,先說一個關于函數和方法的概念,方法這個東西確實和函數看起來有點類似,但是是不一樣的,但是“方法”是需要“類”去調用的,這個“類”可能是數字,也可能是字符串,列表,活著其他對象,但是函數是可以直接使用的,這就是它們的不同,舉個例子。

當函數被加載到內存后,直接 函數名后面加上括號就可以使用了,就像這樣 func_name()。

而方法呢是需要通過對象去調用的,比如 對象名.方法(參數)。

下面開始正式介紹列表的常用方法啦。

4.1 append用于在列表的尾部追加一個新的元素。l1= [1,2,3]#在列表尾部添加一個新的元素4

l1.append(4)print test

[1, 2, 3, 4]

注意!!!在這里有個特別注意事項,就是append方法并不是簡單的返回一個修改過的新列表,而逝把原來的舊列表直接進行操作!!!!

4.2 count 統計一個元素在列表中出現的次數。

列表中的元素是可以重復的,count方法可以統計一個元素在這個列表里重復出現了多少次。

下面是例子。test = ["suhaozhi","linhaifeng","linhaifeng"]

這個列表中有一個“suhaozhi”兩個“linhaifeng”,用count方法就可以找出這個列表中有多少個linhaifeng。print test.count("linhaifeng")

2

返回的數值是2,就說明有2個。

4.3 extend 拓展列表,可以一次性在列表的末尾追加n個值,還可以用一個新的列表去拓展原有的列表。lia= [1,2,3]

lib = [4,5,6]

現在有lia和lib兩個列表,現在要將lib列表中的所有元素全部添加到lia的尾部。lia.extend(lib)

添加完成后,我們再來看看lia列表。print lia

[1, 2, 3, 4, 5, 6]

關于extend方法有個很重要的知識點需要補充!!!!!

還記得之前說的使用+加號去連接兩個相同的序列嗎?[1,2,3] + [4,5,6] extend方法和這種拼接的加號看起來作用很相像,但是本質上完全不同!!!!!extend方法會修改原有的列表!!!而加號拼接則不回修改原列表,會返回一個全新的列表!!!!這兩個地方千萬不要弄混!!

4.4 index 返回指定元素的索引。

index方法用于從列表中找出第一個匹配的元素的索引位置。lia = [1,2,3,"suhaozhi","andy","suhaozhi"]print lia.index("suhaozhi")

3

在搜索suhaozhi的時候,就會發現它在索引為3號的位置,這個列表中有兩個“suhaozhi”但是index方法會從列表的左側開始找,如果找到了,直接返回結果,不在向下匹配了。

如果找不到指定的元素,那么index方法就會拋出一個異常。

4.5 insert 將指定的對象按照指定的位置插入到列表中。li1 = [1,3,5,7,9]

這有個列表,現在想把字符串“two”,插入到索引為1的位置,也就是1和3的中間。li1.insert(1,"two")print li1

[1, 'two', 3, 5, 7, 9]

4.6 pop 彈出,從列表中彈出一個元素,默認彈出最后一個,但是可以通過索引來指定具體彈出哪個元素。

在這解釋下彈出是什么意思,彈出就是從列表中刪除一個元素,在這個元素被刪除時,被刪除的這個元素會作為執行這個方法的返回值。

下面是關于pop方法的操作:li1 = [1,2,3,4]

l11.pop()

print li1

[1, 2, 3]

這個列表最末尾的元素4被彈出了。

接下來我們手動指定彈出第0個元素。l1 = [1,2,3]

l1.pop(0)

print l11

[2, 3]

第0個元素就從列表中被彈出了。

這個pop方法在什么情況下會使用呢?

在實現后進先出(LIFO)隊列的時候,pop方法就發揮出它的用處了。

在這介紹下什么是LIFO后進先出隊列,后進先出隊列,也被稱為,“堆棧”,就好像堆盤子,在拿盤子的時候,一次只能從頂部拿一個盤子,也就是說最后放的盤子,會被最先拿走,同樣,最后被放入隊列,最先從隊列中移除,這就是堆棧,LIFO后進先出隊列。

接下來我們驗證下pop是否具有彈出的功能,能否實現“堆棧”。l1 = [1,2,3]

l1.append(l1.pop())

print l1

[1, 2, 3]

li1.pop()先被執行,最末尾的元素3被彈出,被彈出后作為返回值被li1.append()方法又一次放回到了li1列表的尾部,這樣就實現了“堆棧”,以后在需要后進先出隊列的時候,就可以使用列表的pop方法來實現。

4.7 remove移除,從列表中移除一個元素,但是沒有返回值~

remove方法可以用來移除列表中第一個匹配到的元素。l1 = ['linhaifeng','suhaozhi','linhaifeng']

l1.remove('linhaifeng')

['suhaozhi', 'linhaifeng']

從上面的例子就可以看到,只有第一次被匹配到的元素被刪除了。

當使用remove刪除一個不存在的元素,則會直接拋出異常!

remove和pop最大的區別就是,remove刪除一個元素是沒有任何返回值的。

4.8 reverse 倒序,將列表中存放的元素,按照和原來相反的順序進行排序。test = [1,2,3]

test.reverse()

[3, 2, 1]

特別注意!!!如果需要做反向的迭代操作,有個專門做反向迭代的函數,也叫reverse()這個reverse函數和列表中帶的reverse方法是有區別的,如果需要做反向迭代操作,強烈推薦reverse函數,這個函數返回的不是一個列表,而是一個迭代器(iterator)對象,直接放到循環中進行反向迭代。

(經過測試,直接使用list()函數強制把返回的迭代器轉換成列表也是可以的。)

4.9 sort 排序。

使列表中的元素按照一定順序去排列,sort方法也是直接就該列表本身的。test = [2,1,3]

test.sort()

[1, 2, 3]

關于sort方法也需要額外的補充一下,如果不想對原列表進行修改,想生成一個排序后的新的副本,那么sorted()函數是最好的選擇,sorted()函數會將排序后的列表生成一個新的列表。

sorted函數雖然可以針對各種序列進行排序,但是返回值卻永遠都是以列表的形式print sorted("dcba")

['a', 'b', 'c', 'd']

#python中列表中元素的排序方式還可以自己指定,本篇文章主要是說明,列表,元組,字典之類的使用方法,關于排序后面會單獨有一篇文章做介紹。

三.python元組(tuple)的使用。

元組合列表非常類似,但是它們最大的區別就是元組是不可變的,不能做任何修改,生成元組的方法特別簡單,只要使用逗號(,)分隔了一些值,就自動創建了元組。t1 = 1,2,3,4

print type(t1)

print t1

(1, 2, 3, 4)

元組也支持分片,方法和列表一模一樣,這個就不多介紹啦。

元組分片后還是元組。

既然列表比元組的功能還多,那么要元組有毛用?

上網找了好多資料,終于知道元組為什么不可替代了。

元組可以在創建字典時作為key使用,列表卻不行。

四.python字符串的基本使用(str)。

在本篇文章中,不對字符串格式化做介紹,只介紹關于字符串的一些常用方法,關于字符串格式化,后面會單獨寫一篇文章。

下面介紹一些比較常用的字符串方法(字符串的方法實在太多了,在這里說些常用的吧。)

1.find()在字符串中,查找想要找的子串。

它會返回子串從左數第一個位置的索引,如果沒有找到對應的子串則會返回-1。

s1 = 'maybe you to'

print s1.find("you")

6

find方法不會返回布爾值,如果返回值是0,責說明了在第0位置的索引找到了子串。

補充一個find方法的用法,find方法還支持按字符串的指定范圍查找子串。

比如說查找字符串y,如果不傳任何參數的話,直接在maybe中就可以找到y。s1 = 'maybe you to'

print s1.find('y')

2

在第2個索引的位置,找到了y,然后就不在繼續找了,接著我們指定下索引的范圍讓find從第6個索引開始找,找到第9個索引。

s1 = 'maybe you to'

print s1.find('y',6,9)

6

我們可以手動指定find方法的查找范圍,從哪個索引的字符串開始,從哪個索引的字符串結束。

‘y’是要從字符串中查找的子串,6指從第6個索引開始,9是指從第9個索引開始結束。

2.join 拼接,是字符串中非常非常重要和常用的方法。

主要的功能是用來拼接序列中的元素,讓序列中的元素使用指定的字符串連接起來。

注意!join方法只可以拼接字符串!!!其他的序列是無法拼接的,數字也不行!!

l1 = ['1','2','3','4','5','6']

這個列表中所有的數字已經使用單引號轉換成了字符串。

現在需要做的就是使用+-將l1列表里所有的元素連接成一個字符串。

print "+-".join(l1)

1+-2+-3+-4+-5+-6

3.lower小寫,將字符串中所有的字符全部轉換為小寫。

如果想要做這種“不區分大小寫”的功能的話,這個方法就派上用場了,無論大寫小寫,全部轉換為小寫。

在python中,是嚴格區分大小寫的,假如想要在列表中查找一個元素是否存在,比如說在列表中找到字符串為“guilty“的元素,但是用戶輸入的是GUILTY,由于python會嚴格區分大小寫,就會導致指定的元素找不到。

下面是關于大小寫的測試代碼。

name = "GUILTY"

test = ["suhaozhi","guilty"]

if name in test:

print "ok"

else:

print "not found!"

not found

列表中命名有guilty這個元素,因為大小寫的問題,現在找不到。

接下來就使用lower方法,對字符串做個轉換。

name = "GUILTY".lower()

test = ["suhaozhi","guilty"]

if name in test:

print "ok"

else:

print "not found!"

ok

這樣,指定的元素就找到了。

print "GUILTY".lower()

guilty

在這里看到字符串成功的被轉換成小寫。

4.replace 替換,替換字符串中指定的子串。

這個方法,沒有什么好說的,功能就是字符串替換,下面是例子。

s1 = "i have a pen"

print s1.replace("pen","apple")

i have a apple

5.split 拆分,也是特別重要和常用的一個字符串方法,將字符串按照指定的格式進行拆分,并且以列表的方式返回。

s1 = '1+-2+-3+-4+-5+-6+-7'

將上面的字符串以+-為分隔符拆分。

s1 = '1+-2+-3+-4+-5+-6+-7'

print s1.split('+-')

['1', '2', '3', '4', '5', '6', '7']

補充~在使用split做拆分的時候,如果不指定分隔符,默認責會使用空格,制表符,換行符作為分隔符。

split方法中,還可以指定最大的拆分次數,做多可以拆多少次,假如說,最多只拆分兩次,可以在加個參數2

s1 = '1+-2+-3+-4+-5+-6+-7'

print s1.split('+-',2)

['1', '2', '3+-4+-5+-6+-7']

上面那個字符串被拆成了三個元素,前兩個+-被當作拆分符拆了兩次。

6.strip脫掉...去除字符串兩側的字符,一般情況下,經常用這個方法來去掉換行符和空格。

s1 = "+aaa+"

print s1.strip('+')

aaa

字符串兩邊的+加號被去掉了。

strip只能去掉字符串兩邊的多余字符,對字符串中間的字符不生效。

這個方法也很常用,用來去掉空格和換行符特別管用!!!!

五.python字典(dict)的基本使用方法。

當數字索引不好用的時候,就可以考慮使用字典啦。

字典是python中唯一的映射類型,字典中的值沒有特殊的順序,都是存儲在特定的key下,key可以是數字,可以是字符串,也可以是元組。

下面是字典的創建和使用字典。

字典是由多個鍵值對組成的,每個key(鍵)和它的value(值)都是用:冒號分隔,每個鍵值對之間都使用逗號分隔,最外層使用大括號括起來{}。

下面是python字典的結構。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

python字典的創建方法。

方法1:最常規的字典創建方式。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

方法2:使用元組影射。

items = [('name','suhaozhi'),('age',22)]

d1 = dict(items)

print d1

{'age': 22, 'name': 'suhaozhi'}

方法3:通過關鍵字來創建字典。

d1 = dict(name = 'suhaozhi',age = 22)

print d1

{'age': 22, 'name': 'suhaozhi'}

創建空字典:

d1 = {}

d1 = dict()

1.字典的基本操作。

字典不屬于序列,但是它的操作方法和序列很類似。

1.1查看字典有多少鍵值對。

如果想要查看一個字典里有多少鍵值對,使用len()函數就可以查到。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

print len(dict1)

1.2獲取字典中某個key對應的value。

print dict1['k1']

v1

注意!這種獲取vlaue的方式不推薦,因為一旦找不到指定的key,程序又會拋出異常,推薦使用字典中的get方法去獲取vlaue,get方法后面會介紹!!

1.3對字典中指定的key賦值。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

dict1['k4'] = 'v4'

print dict1

{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': 'v4'}

1.4刪除字典中指定的鍵值對。

要刪除字典中的某個鍵值對,只需要指定鍵(key)就可以刪除了。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

del dict1["k1"]

print dict1

{'k3': 'v3', 'k2': 'v2'}

1.5檢查字典中是否存在指定的key。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

print 'k3' in dict1

True

2. 關于創建字典的一些注意事項。

key的類型,需要注意,字典的key可以是任意的不可變類型,可以是字符串,可以是浮點數,也可以是數字,也可以是元組,只要是不可變的類型都可以做字典的key。

字典的鍵值對是可以自動添加的,即使某個key在字典中并不存在,只要直接給key賦值,python就會去創建這個key(所以字典沒有append方法就是因為這個原因)。

3.字典(dict)的常用方法。

3.1 clear清除,該方法可以清除字典中所有的項,無任何返回值。

dict1 = {"k1":"v1","k2":"v2","k3":"v3"}

dict1.clear()

print dict1

注意啦!!其實clear方法看起來很普通,清空了字典里所有的key和value,這些定義一個空字典也可以做到,但這并非真正的刪除,clear可以做到真正意義上的刪除!下面是示例。

第一種情況:

d1 = {}

#首先創建了一個空字典。

d2 = d1

#創建了一個d2變量,把內存地址指向d1

d1['k1'] = 'v1'

#給d1字典創建了一個鍵值對

print d2

{'k1': 'v1'}

#新創建的那個鍵值對在變量d2上也可以看到,這是因為,d1和d2使用了指向了同一個內存地址,不相信的話,可以使用id()函數去查看!

d1 = {}

#從新給d1變量賦值了一個空字典,注意!!這并不是刪除,而是改變了d1變量原來的內存地址!!!

d1的新內存地址指向了一個空字典。

print d2

{'k1': 'v1'}

#然而d2的內存地址沒有像d1那樣發生變化,指向的還是原來的那個位置,所以,之前的鍵值對并沒有刪除,還在內存空間中沒有釋放,如果想真正的刪除,就需要使用clear方法。

下面是使用clear方法去清空字典,和上面那種所謂的“刪除”做個比較。

d1 = {}

d2 = d1

d1['k1'] = 'v1'

print d2

{'k1': 'v1'}

d1.clear()

print d2

{}

所以說,clear才是真的清除。

3.2 copy 淺復制,返回一個具有相同鍵值對的新字典。

首先先舉一個不使用copy方法,直接靠變量之間賦值實現所謂的“復制”!

d1 = {'k1':'v1','k2':'v2'}

d2 = d1

print d1

{'k2': 'v2', 'k1': 'v1'}

print d2

{'k2': 'v2', 'k1': 'v1'}

看起來像是通過變量間賦值的方式,實現了一個類似“復制”的效果,其實這并不是真正的復制,具體原因,看下面的操作就明白了。

接下來,我們給d1增加一個鍵值對。

d1['k3'] = 'v3'

雖然改變的是d1變量中的字典,但是!d2中的字典也會發生同樣的改變!!

print d1

{'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}

print d2

{'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}

修改了d1,d2也發生了同樣的改變,這是因為d1和d2同時指向了一個內存地址,這兩個變量使用的是相同的內存空間,這一點是可以通過id函數看到的。

print id(d1)

4481913472

print id(d2)

4481913472

這兩個變量使用的內存地址是一模一樣的!!!

下面是copy方法的使用示例。

d1 = {'k1':'v1','k2':'v2'}

d2 = d1.copy()

#使用copy方法,去復制字典

d2['k3'] = 'v3'

#修改復制后的字典,給新字典增加一個鍵值對。

print d1

{'k2': 'v2', 'k1': 'v1'}

print d2

{'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}

#從這可以看出,修改了新字典后,對新字典進行修改,完全沒有影響到d1變量。

#這是因為d2現在是一個獨立的個體,d1和d2復制后內容雖然一樣,但是分別使用的是不同的內存空間,下面使用id函數去查看一下

print id(d1)

4537868928

print id(d2)

4538835584

注意!!字典中的copy方法只是淺拷貝,只會拷貝父級對象,如果字典中有子對象(字典中嵌套了字典,或者嵌套了列表,就是子對象。)

下面來測試一下。

d1 = {'k1':'v1','k2':'v2','k3':[1,2,3]}

d2 = d1.copy()

print d1

{'k3': [1, 2, 3], 'k2': 'v2', 'k1': 'v1'}

print d2

{'k3': [1, 2, 3], 'k2': 'v2', 'k1': 'v1'}

#k3這個key對應的值是一個列表,這個列表在字典中就是個子對象,現在在這個列表中追加一個元素。

d2['k3'].append(4)

#這時,我們查看一下d1和d2字典都發生了哪些變化。

print d1

{'k3': [1, 2, 3, 4], 'k2': 'v2', 'k1': 'v1'}

print d2

{'k3': [1, 2, 3, 4], 'k2': 'v2', 'k1': 'v1'}

#修改了一個字典中的子對象后,副本的子對象也發生了變化。

這說明了一個問題,就是copy方法只會復制字典中的父級對象,子對像其實并沒有復制,而是兩個字典中的key同時指定了同一個內存空間!!

如果想要使字典中的子對象也得到獨立的復制,則可以使用copy模塊中的deep copy(深度復制)。

想要做這種深度復制,需要導入一個copy模塊中的deepcopy函數。

from copy import deepcopy

d1 = {'k1':'v1','k2':'v2','k3':[1,2,3]}

d2 = deepcopy(d1)

d2['k3'].append(4)

print d1

{'k3': [1, 2, 3], 'k2': 'v2', 'k1': 'v1'}

print d2

{'k3': [1, 2, 3, 4], 'k2': 'v2', 'k1': 'v1'}

3.3 fromkeys()使用指定的鍵,建立一個新的字典,并且給每個key賦予一個默認的value,如果不指定value,默認為None。

d1 = dict.fromkeys(['name','age'])

print d1

{'age': None, 'name': None}

我們還可以手動指定默認值。

d1 = dict.fromkeys(['name','age'],"aaa")

print d1

{'age': 'aaa', 'name': 'aaa'}

#每建立了一個鍵值對,值默認等于aaa。

3.4 get()用于訪問字典key對應的值,d2['k3']和這種取值方式很類似,但是get這種方法在取值時,如果遇到了找不到的key,則不會拋出任何異常。

如果遇到了在字典中找不到的key,默認會返回None,我們還可以手動去指定get方法的返回值。

d1 = {'name':'suhaozhi','age':22}

print d1.get('name')

suhaozhi

d1 = {'name':'suhaozhi','age':22}

#接下來查找一個字典中不存在的key,看看會返回什么。

print d1.get('aaaa')

None

#當找不到指定的key時,默認會返回None,我們還可以手動指定返回值。

#當現在需要指定,去找一個不存在的key,如果找不到返回字符串null。

d1 = {'name':'suhaozhi','age':22}

print d1.get('aaaa','null')

null

3.5 has_key 檢查key,檢查字典中是否存在指定的key,也可以使用in去檢測,這兩個是一模一樣的。

3.6 items 將字典所有的項,以列表的方式返回,列表中嵌套的是元組,每一個鍵值對都包含在同一個元組中。

d1 = {'name':'suhaozhi','age':22}

print d1.items()

[('age', 22), ('name', 'suhaozhi')]

3.7 iteritems 和items方法類似,但是iteritems方法返回的是個迭代器,不是列表。

如果需要做迭代操作的話,強烈推薦iteritems方法!因為它更高效!!!。

3.8 keys 返回一個字典中所有的key,以列表的形式返回。

d1 = {'name':'suhaozhi','age':22}

print d1.keys()

['age', 'name']

3.9 iteritems 和key類似,返回的也是一個字典中所有的key,以迭代器的方式返回。

3.10 pop 彈出,彈出字典中指定鍵值對,通過key來指定。

(之前在list里面說過了,這里的彈出指的就是刪除,并返回。)

d1 = {'name':'suhaozhi','age':22}

print d1.pop('name')

suhaozhi

print d1

{'age': 22}

3.11 popitem 隨機彈出,隨機彈出字典的鍵值對,以元組的方式返回,刪除的順序是隨機的!

d1 = {'name':'suhaozhi','age':22}

print d1.popitem()

('age', 22)

print d1

{'name': 'suhaozhi'}

3.12 setdefault 和get方法很像,用來獲取指定key對應的值,當key不存在時,默認返回None,也可以手動指定返回值,基本上功能和get一樣,不演示了。

3.13 update 使用一個字典更新另外一個字典,舊字典的內容會更新到新字典中,如果有相同的key,對應的值會被覆蓋!!

d1 = {'name':'suhaozhi','age':22}

d2 = {'k1':'v1','k2':'v2','age':130}

d1.update(d2)

print d1

d2字典中的鍵值對,被更新到了d1字典中,相同的key被覆蓋了。

3.14 values 獲取字典中所有的值 ,以列表的方式返回。

d1 = {'name':'suhaozhi','age':22}

print d1.values()

3.15 itervalues 獲取字典中所有的值,返回的是迭代器。

六.python集合(set)。

set集合中,每一個元素都是可hash的,在這個集合中是唯一的,不能重復,而且每個元素之間是無序的。

如何可以體現出set集合中每個元素的唯一性。

首先定義一個列表

[1,1,2,2,3,3,4,4,5,5,6,6]

將這個列表轉換為set集合。

print set([1,1,2,2,3,3,4,4,5,5,6,6])

set([1, 2, 3, 4, 5, 6])

轉換成集合之后,重復的元素被去掉了。

1.python集合中常用的方法。

1.1 add 在集合中添加一個元素。

s1 = set()

s1.add("suhaozhi")

print s1

set(['suhaozhi'])

1.2 update 將一個序列進行拆分,然后分別傳入到集合中。

s1 = {"suhaozhi"}

s1.update([1,2,3,4,5])

print s1

set([1, 2, 3, 4, 5, 'suhaozhi'])

1.3 remove 移除一個元素。

s1 = {'suhaozhi',1,2,3,4,5,6}

s1.remove('suhaozhi')

print s1

set([1, 2, 3, 4, 5, 6])

集合中的suhaozhi被移除了。

1.4 issubset 用來測試,本集合中的每個元素是否都在另外一個集合中,也可以理解為另外一個集合是否包含本集合的所有元素。(以本集合為基準)

s1 = {'suhaozhi',1,2,3,4,5,6}

s2 = {6,5,4,3,2,1,'suhaozhi',222}

print s1.issubset(s2)

True

s2 中之要包含s1中所有的元素,返回結果就為真。

這個方法還可以使用兩個符號代替,個人認為符號更容易記住。

s1.issubset(s2)可以寫成這樣 s1 <= s2

這兩種語法的作用一模一樣。

1.5 issuperset 和issubset方法類似,只不過方向上是相反的,另外一個集合中的每個元素是否包含在本集合中,也可以理解為本集合是否包含另外一個集合的所有元素。(以另外一個元素為基準)

s1 = {'suhaozhi',1,2,3,4,5,6}

s2 = {6,5,4,3,2,1,'suhaozhi',222}

print s1.issuperset(s2)

False

s1.issuperset(s2) 可以寫成這樣 s1 >= s2

這兩種語法的作用也是一模一樣的。

1.6 union 返回一個新的集合,這個集合中包含了兩個集合中所有的元素,就是將兩個元素融合。

s1 = {1,2,3}

s2 = {2,3,4}

print s1.union(s2)

set([1, 2, 3, 4])

union方法還可以使用|豎線代替。

s1 | s2 和 s1.union(s2) 功能是一樣的。

1.7 intersection交集,取兩個集合共同存在的元素。

s1 = {1,2,3}

s2 = {2,3,4}

print s1.intersection(s2)

set([2, 3])

s1.intersection(s2) 可以寫成s1 & s2

1.8 difference差集,以本集合為中心,返回本集合有,但另一個集合沒有的元素。

s1 = {1,2,3}

s2 = {2,3,4}

print s1.difference(s2)

set([1])

s1.difference(s2) 可以寫成 s1-s2

1.9 symmetric_difference 返回一個新的集合,這個集合中,包含本集合和另一個集合不重復的元素。

s1 = {1,2,3}

s2 = {2,3,4}

print s1.symmetric_difference(s2)

s1.symmetric_difference(s2) 可以寫成s1 ^ s2

1.10 copy 集合的淺復制,和字典的用法一樣,在這就不做演示了。

1.11discard 如果存在就刪除,如果當前集合中存在某個元素,發現存在就移除。

s2 = {2,3,4}

s2.discard(4)

print s2

set([2, 3])

1.12 pop 彈出集合中的一個元素,如果集合中沒有元素可以彈出了,則拋出一個異常。

這個和列表的pop很類似,在這就不做演示了。

1.13 clear 真正意義上清空集合中的所有元素。

1.14 剩余的一些方法的補充。

intersection_update ,difference_update,symmetric_difference_update這些方法和intersection ,difference,symmetric_difference,基本上都是一樣的,只不過帶有update字樣的方法會對原有集合進行操作,不帶update的會生成一個新的集合。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python列表添加字符串_2.python基础之—列表,元组,字典,集合,字符串的使用方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。