Python中list(列表)、tuple(元組)、dict(字典)基本操作快速入門


最近看了一下Python的列表、字典以及元組等幾種數據類型,感覺這幾種數據類型比較常用,順便總結了一下一些比較常用的用法。

  1. 列表是Python中比較常用的數據類型,並且列表是可以改變的,使用也非常簡單,具體操作如下:

1)如創建一個列表:

list1 = [1,2,3]
list2 = ['a','b','c']
list3 = [1,2,3,'a','b','abc']
list4 = [1,[2,3],['a','b',''c]]
#創建一個有序列表
list5 = range(10)
#創建一個二維列表
list6 = [[ 0 for col in range(10)] for row in range(10)]

2)訪問列表中的值

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
list1 = [1,2,3,4,5,6]
#如取出list1列表中第二個元素的值:(注意:列表的下標是從0開始的)
print('list1列表的第二個元素的值爲:%d' % list1[1]) #如果想取出其它元素以此類推
#輸出列表中的所以元素的值
print('遍歷輸出list1所有元素的值:')
for i in list1:
    print(i)
#輸出列表中奇數項的值(即取出列表中第1、3、5...等項的值)
print('輸出list1中奇數項元素的值:')
for j in list1[::2]: #這裏使用了列表的切片以及步長
    print(j)
list2 = [1,2,[3,4,[6,7,8]]]
#取出列表list2中的值3的元素
print('取出列表list2%s中的值3的元素:' % list2)
print(list2[2][0])
'''
原理:首先看數值3在一個子列表中,而這個子列表屬於外層列表(父列表)的第三個元素,先取出含有數值3的子列表即:list2[2],由於list2[2]仍然是一個列表,而數值3處於這個列表的第一個元素的位置,所以
我們仍可以按照列表的操作取出list2[2]這個子列表的第一個元素list2[2][0],即取出了值爲3的元素。
'''
#取出列表list2中的值8的元素
print('取出列表list2%s中的值8的元素:' % list2)
print(list2[2][2][2]) #參照上邊以此類推
'''運行結果如下:
list1列表的第二項的值爲:2
遍歷輸出list1所有元素的值:
1
2
3
4
5
6
輸出list1中奇數項元素的值:
1
3
5
取出列表list2[1, 2, [3, 4, [6, 7, 8]]]中的值3的元素:
3
取出列表list2[1, 2, [3, 4, [6, 7, 8]]]中的值8的元素:
8
'''

3)增加或者修改列表的值

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
list3 = ['Python','Java','Php']
print('原列表list3爲:%s' % list3)
#給list3添加一個元素
list3.append('C#')
print('給list3添加一個元素C#:%s' % list3)
#修改列表list3的第一個值爲Python3
list3[0] = 'Python3'
print('修改列表list3的第一個元素的值爲Python3:%s' % list3)
'''運行結果如下:
原列表list3爲:['Python', 'Java', 'Php']
給list3添加一個元素C#:['Python', 'Java', 'Php', 'C#']
修改列表list3的第一個元素的值爲Python3:['Python3', 'Java', 'Php', 'C#']
'''


4)刪除列表中的元素

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
list4 = ['Python','Java','Php','Go']
print('原列表爲:%s' % list4)
#刪除值爲Php的元素
del list4[2]
print('刪除值爲Php的元素:%s' % list4)
#刪除值爲Go的元素
list4.pop()
print('刪除值爲Go的元素:%s' % list4)
'''運行結果如下:
原列表爲:['Python', 'Java', 'Php', 'Go']
刪除值爲Php的元素:['Python', 'Java', 'Go']
刪除值爲Go的元素:['Python', 'Java']
'''

5)列表的一些其它基本操作

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
list1 = [1,2,3,4,5]
list2 = ['Python','Java','Php','Go']
print('列表list1爲:%s' % list1)
print('列表list2爲:%s' % list2)
#獲得列表list1的長度
l = len(list1)
print('列表list1的長度爲:%d' % l)
#合併list1和list2成爲一個新的列表list3
list3 = list1 + list2
print('合併list1和list2成爲一個新的列表:%s' % list3)
#創建一個指定長度且元素值相同的列表list4
list4 = ['Python'] * 4
print('創建一個指定長度且元素值相同的列表:%s' % list4)
#判斷元素3是否存在於列表list1中
f = 3 in list1
print('判斷元素3是否存在於列表list1中:%s' % f)
#截取列表list2中第二個元素以後的值
list5 = list2[1:]
print('截取列表list2中第二個元素以後的列表元素:%s' % list5)
#獲取列表list1中的元素的最大值
max_value = max(list1)
print('列表list1中元素的最大值爲:%d' % max_value)
#獲取列表list1中元素的最小值
min_value = min(list1)
print('列表list1中元素的最小值爲:%d' % min_value)
#將元組轉化成列表
a = (1,2,3)
list6 = list(a)
print('元組(1,2,3)轉化成的列表爲:%s' % list6)
#將字符串轉化成列表
s = 'abc'
list7 = list(s)
print("字符串'abc'轉化成的列表爲:%s" % list7)
#列表轉化成字符串:
list8 = "".join(list7)
print("列表['a','b','c']轉化成的字符串爲:%s" % list8)
#應用場景如:做一個加法運算的拼接
# expr = "+".join([1,2,3])
#結果爲:1+2+3
'''運行結果如下:
列表list1爲:[1, 2, 3, 4, 5]
列表list2爲:['Python', 'Java', 'Php', 'Go']
列表list1的長度爲:5
合併list1和list2成爲一個新的列表:[1, 2, 3, 4, 5, 'Python', 'Java', 'Php', 'Go']
創建一個指定長度且元素值相同的列表:['Python', 'Python', 'Python', 'Python']
判斷元素3是否存在於列表list1中:True
截取列表list2中第二個元素以後的列表元素:['Java', 'Php', 'Go']
列表list1中元素的最大值爲:5
列表list1中元素的最小值爲:1
元組(1,2,3)轉化成的列表爲:[1, 2, 3]
字符串'abc'轉化成的列表爲:['a', 'b', 'c']
列表['a','b','c']轉化成的字符串爲:abc
'''

6)Python列表包含的方法示例

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
#注意以下的列表操作都是對原列表進行操作
list = [3,2,4,1,5]
print('原列表list爲:%s' % list)
#在列表尾部添加新元素
list.append(6)
print('在列表尾部添加新元素6:%s' % list)
#在list列表的第2個位置插入一個新元素3
list.insert(1,3)     #注意列表的下標是從0開始
print('在list列表的第2個位置插入一個新元素3:%s' % list)
#在列表尾部追加另一個列表的值
list1 = [1,2,3]
list.extend(list1)
print('在列表尾部追加另一個列表%s的值:%s' % (list1,list))
#統計列表list中值爲3的元素出現的次數
count = list.count(3)
print('統計列表list中值爲3的元素出現的次數:%d' % count)
#找出列表list中第一個值3的元素的索引
index = list.index(3)
print('找出列表list中第一個值3的元素的索引:%d' % index)
#移除列表中第2個元素 #####注意:默認情況下list.pop()是移除列表的最後一個元素
list.pop(1)           #注意list下標是從0開始
print('移除列表中第4個元素:%s' % list)
#移除列表中第一個值爲3的元素
list.remove(3)
print('移除列表中第一個值爲3的元素:%s' % list)
#對list列表進行排序
list.sort() #默認是按照ASSCII來排序的
print('對list列表進行排序:%s' % list)
#反轉列表中的元素
list.reverse()
print('反轉列表中的元素:%s' % list)
#反轉列表中的元素
list.reverse()
print('反轉後的列表爲:%s' % list)
'''運行結果如下所示:
原列表list爲:[3, 2, 4, 1, 5]
在列表尾部添加新元素6:[3, 2, 4, 1, 5, 6]
在list列表的第2個位置插入一個新元素3:[3, 3, 2, 4, 1, 5, 6]
在列表尾部追加另一個列表[1, 2, 3]的值:[3, 3, 2, 4, 1, 5, 6, 1, 2, 3]
統計列表list中值爲3的元素出現的次數:3
找出列表list中第一個值3的元素的索引:0
移除列表中第4個元素:[3, 2, 4, 1, 5, 6, 1, 2, 3]
移除列表中第一個值爲3的元素:[2, 4, 1, 5, 6, 1, 2, 3]
對list列表進行排序:[1, 1, 2, 2, 3, 4, 5, 6]
反轉列表中的元素:[6, 5, 4, 3, 2, 2, 1, 1]
'''

7)list列表的深淺拷貝比較及原理講解

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
#list列表淺拷貝示例
import  copy
list1 = [1,2,3,[4,5,6]]
list2 = list1.copy()
print('list1的值爲:%s' % list1)
print('list2的值爲:%s' % list2)
'''運行結果爲
list1的值爲:[1, 2, 3, [4, 5, 6]]
list2的值爲:[1, 2, 3, [4, 5, 6]]
'''
#修改list2中的值
list2[0] = 3
print('list1的值爲:%s' % list1)
print('list2的值爲:%s' % list2)
'''運行結果爲:
list1的值爲:[1, 2, 3, [4, 5, 6]]
list2的值爲:[3, 2, 3, [4, 5, 6]]
我們將list1拷貝了一份給list2,當修改list2的第一個元素值爲3的時候,list1的值並沒有發生改變,
這個很好理解,那麼請繼續往下邊看
'''
#繼續修改list2的值,這次修改list2子列表的值
list2[3][0] = 5
print('list1的值爲:%s' % list1)
print('list2的值爲:%s' % list2)
'''
list1的值爲:[1, 2, 3, [5, 5, 6]]
list2的值爲:[3, 2, 3, [5, 5, 6]]
 通過這次修改,我們會驚訝的發現,我們這次將list2的子列表的第一個元素修改爲5,爲什麼list1的子列表中的第一個元素的值也跟着發生變化了呢?
 原因:淺拷貝只複製(拷貝)列表的第一層,還拿上邊的爲例來說,第一次當修改list2的第一個元素時,由於列表list1的第一個元素是一個真實的值,所以list2在拷貝的時候直接把這個值拷貝了過來,所以list2在修改這個值時,不會影響list1的值;而在list2第二次修改的時候,修改的是子列表中的值,而在list1中第四個位置存儲的並不是子列表的值,而是子列表的一個引用地址,由於淺拷貝只拷貝(複製)了一層,所以list2在拷貝的時候,是把list1中子列表的引用地址拷貝了過來,這時list1和list2中的第四個元素存放一個相同的引用地址,都指向了同一個子列表,所以當修改list1或者list2中任意一箇中的子列表的值時,另一個列表的子列表的值也會跟着變化。
 注意:
 淺拷貝的幾種方式
 p1 = copy.copy(list1)
 p2 = list1[:] 
 p3 = list(list1)
 以上這幾種方式都屬於淺拷貝,使用的時候需要注意一點,不然會有坑。。。
'''
'''
深拷貝的實現方式如下:
list4 = copy.deepcopy(list1)
深拷貝其實就是完全把列表完全拷貝了一遍,修改任意一個,都不會影響另一個列表
'''

2.元組(tuple)與列表很類似,最大的不同點在於元組的元素不能修改

1)創建元組

#創建一個空的元組
tup1 = ()
#創建只包含一個元素的元組
tup2 = ('a',)  #注意需要在元素後邊添加逗號
#創建一個包含多個元素的元組
tup3 = (1,2,3,'Java','Python','Php')

2)元組的基本操作

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
tup1 = (1,2,3)
tup2 = ('Python','Java','Php','C#')
#訪問元組tup2中的第一個元素
s = tup2[0]
print('訪問元組tup2中的第一個元素:%s' % s)
#遍歷輸出元組tup2中的所有元素:
print('遍歷輸出元組tup2中的所有元素:')
for i in tup2:
    print(i)
#合併tup1和tup2爲一個新的元組(即連接兩個元組)
tup3 = tup1 + tup2   #注意:這裏並沒有對元組做任何修改,而是將兩個元組合併成了一個新的元組,老的元組並沒有被修改。
print('合併tup1和tup2的新元組爲:' , tup3)
#刪除元組 由於元組不能修改的特性,所以元組內的元素不允許刪除,但是我們可以使用del來刪除整個元組
del tup3
#如果將整個元組刪除就不能在訪問該元組,否則會出現not defined的異常錯誤
#計算元組tup2的長度:
l = len(tup2)
print('計算元組tup2的長度爲:%d' % l)
#判斷元素3在元組tup1是否存在:
b = 3 in tup1
print('判斷元素3在元組tup1是否存在:%s' % b)
#取出元組tup1中的最大值:
max = max(tup1)
print('元組tup1中的最大值:%d' % max)
#取出元組tup1中的最小值:
min = min(tup1)
print('元組tup1中的最小值:%d' % min)
#將列表轉換爲元組
list1 = ['a','b','c']
tup4 = tuple(list1)
print('列表list1%s轉換爲元組:%s' % (list1, tup4))
#以上爲列表的一些基本操作,主要元組是不可以修改,例如:tup1[1] = 10這樣的操作是不合法的。
'''運行結果如下:
訪問元組tup2中的第一個元素:Python
遍歷輸出元組tup2中的所有元素:
Python
Java
Php
C#
合併tup1和tup2的新元組爲: (1, 2, 3, 'Python', 'Java', 'Php', 'C#')
計算元組tup2的長度爲:4
判斷元素3在元組tup1是否存在:True
元組tup1中的最大值:3
元組tup1中的最小值:1
列表list1['a', 'b', 'c']轉換爲元組:('a', 'b', 'c')
'''

3.Python字典(dict)使用了key-value存儲和其它語言中的map類似,格式要求爲d = {key1:value1, key2: value2},且可以存儲任意類型的對象,但是字典的key是不可變類型,而value可以改變,並且只允許

同一個key出現一次(如果同一個key被賦值兩次,則後一次會覆蓋前一次的value)。

1)字典的一般定義形式如下:(注意字典dict的格式)

d1 = {'a':1, 'b':2, 'c':3}
d2 = {'北京':['昌平','朝陽','大興','東城'],'上海':['虹口','嘉定','浦東','松江']}

2)訪問字典中的值

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
d1 = {'name':'zhangsan','age':21,'addr':'beijing'}
#輸出字典d1中age的值
a = d1['age']   #或者 a2 = d1.get('age')
print('輸出字典d1中age的值:%d' % a)
#便利輸出字典中的key和value
print('將字典轉化成列表的形式遍歷輸出:')
print('d1.items()的結果爲:', d1.items())  #items()將字典裏邊的鍵/值轉化成了元組,將字典整個轉換成包含元組的列表
for key,value in d1.items():
    print(key,value)
print('直接遍歷輸出字典中的值:')
for i in d1:
    print(i,d1[i])
'''運行結果如下:
輸出字典d1中age的值:21
將字典轉化成列表的形式遍歷輸出:
d1.items()的結果爲: dict_items([('name', 'zhangsan'), ('age', 21), ('addr', 'beijing')])
name zhangsan
age 21
addr beijing
直接遍歷輸出字典中的值:
name zhangsan
age 21
addr beijing
'''

3)字典的一些其它基本操作,如修改、添加、刪除

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
d1 = {'name':'zhangsan','age':21,'addr':'beijing'}
#爲字典添加一個新的鍵值對'gender':'male':
d1['gender'] = 'male'
print("爲字典添加一個新的鍵值對'gender':'male'後:",d1)
#修改d1中age的值爲22:
d1['age'] = 22
print('修改d1中age的值爲22:',d1)
#刪除d1中的addr
del d1['addr']
print('刪除d1中的addr:',d1)
'''
d1.clear() #能夠清空字典
del d1  #是刪除字典
'''
#將兩個列表合成一個字典
list1 = ['a','b','c','d']
list2 = [1,2,3,4]
d2 = dict(zip(list1,list2))
print('將兩個列表合成一個字典:',d2)
'''運行結果如下:
爲字典添加一個新的鍵值對'gender':'male': {'name': 'zhangsan', 'age': 21, 'addr': 'beijing', 'gender': 'male'}
修改d1中age的值爲22: {'name': 'zhangsan', 'age': 22, 'addr': 'beijing', 'gender': 'male'}
刪除d1中的addr: {'name': 'zhangsan', 'age': 22, 'gender': 'male'}
將兩個列表合成一個字典: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
'''

4)字典的內置方法的簡單示例:

#!/usr/bin/env python
#-*- coding:UTF-8 -*-
d1 = {'name':'zhangsan','age':21,'addr':'beijing'}
#獲取字典d1的所有鍵(key):
keys = d1.keys()       #以列表形式返回所有鍵的值
print('獲取字典d1的所有鍵(key):', keys)
#獲取字典d1的所有值(value):
values = d1.values()   #以列表形式返回所有value的值
print('獲取字典d1的所有值(values):', values)
#對字典進行一次淺拷貝
d2 = d1.copy()      #返回字典的一個淺拷貝
print('原字典:',d1)
print('拷貝的字典:',d2)
#取出字典d1中鍵爲addr的值
addr = d1.get('addr')   #返回指定鍵的值,如果之不存在,則可以返會指定的默認值
print('取出字典d1中鍵爲addr的值:%s' % addr)
#取出字典d1中鍵爲gender的值,如果不存在就添加
g = d1.setdefault('gender','male')   #如果字典中不存在該鍵,將會把該鍵以及指定的默認值添加進字典
print('取出字典d1中鍵爲gender的值,如果不存在就添加:',d1)
#把另一個字典中的鍵值對跟新到字典d1中:
d3 = {'hobby':'meizi'}
d1.update(d3)       #把另個字典的鍵/值更新到d1中
print("把另一個字典d3{'hobby':'meizi'}中的鍵值對跟新到字典d1中:", d1)
#刪除字典中鍵age所對應的值,並將value返回
v = d1.pop('age')    #刪除字典中指定的鍵以及對應的值,並且返回鍵的值
print('刪除字典中鍵age所對應的值,並將value返回:', v)
print('此時字典d1包含的項有:', d1)
#隨機刪除字典d1中的一對鍵值,並返回改鍵值對:
kv = d1.popitem()     #隨機刪除字典中的一對鍵值並將結果返回
print('隨機刪除字典d1中的一對鍵值,並返回改鍵值對:', kv)
print('此時字典d1包含的項有:', d1)
#刪除字典d1內的所有元素
d1.clear()
print('刪除字典d1內的所有元素:', d1)
#創建一個新字典
d4={}.fromkeys(('a','b'),1)   #創建一個新字典,以seq中的元素爲鍵,以val爲字典的鍵對應的初始值
print('創建一個新字典d4:', d4)
'''運行結果如下:
獲取字典d1的所有鍵(key): dict_keys(['name', 'age', 'addr'])
獲取字典d1的所有值(values): dict_values(['zhangsan', 21, 'beijing'])
原字典: {'name': 'zhangsan', 'age': 21, 'addr': 'beijing'}
拷貝的字典: {'name': 'zhangsan', 'age': 21, 'addr': 'beijing'}
取出字典d1中鍵爲addr的值:beijing
取出字典d1中鍵爲gender的值,如果不存在就添加: {'name': 'zhangsan', 'age': 21, 'addr': 'beijing', 'gender': 'male'}
把另一個字典d3{'hobby':'meizi'}中的鍵值對跟新到字典d1中: {'name': 'zhangsan', 'age': 21, 'addr': 'beijing', 'gender': 'male', 'hobby': 'meizi'}
刪除字典中鍵age所對應的值,並將value返回: 21
此時字典d1包含的項有: {'name': 'zhangsan', 'addr': 'beijing', 'gender': 'male', 'hobby': 'meizi'}
隨機刪除字典d1中的一對鍵值,並返回改鍵值對: ('hobby', 'meizi')
此時字典d1包含的項有: {'name': 'zhangsan', 'addr': 'beijing', 'gender': 'male'}
刪除字典d1內的所有元素: {}
創建一個新字典d4: {'a': 1, 'b': 1}
'''


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章