本文實例講述了python基礎學習之基本數據結構。分享給大家供大家參考,具體如下:
前言
相比于php,python同樣也是腳本解析語言,所以在使用python的時候,變量和數據結構相對于編譯語言來說都會簡單許多,但是python相比于php來說,變量類型的定義會比較嚴格:string->int的轉換沒有php那么方便。但這也讓程序穩定性有所提升,例如和客戶端交互的時候,數據庫取出來的數字int和緩存取出來的數字(默認是string)需要手動進行轉換(否則會有報錯提示),而php不需要手動轉換的,返回值類型不對可能會使客戶端崩潰。所以本文也針對python的數據結構作一個基礎總結,并在個別部分與php作比較。
一、數據結構類型
python包含的常規數據結構類型有:數字、字符串、list(列表)、tuple(元組)、set(集合)、 dictionary(字典)
二、數據結構說明及其用法
1、常用數字類型:int(有符號整型) 、long(長整型[也可以代表八進制和十六進制]) 、float(浮點型) 、complex(復數:a + bj形式)
2、字符串類型:與php、java等字符串類型一致。
python字符串常用操作有:
(1)拼接:加號(+)是字符串連接運算符,如 str1 + str2;
(2)重復:星號(*)是重復操作,如 str2 = str1 * 2,表示兩個str1字符串重復拼接;
(3)剪切:
①str[0,1]——截取從0開始的一位;
②str[:10]——截取0開始的10位;
③str[:-1]——截取0開始到倒數1位(不包括倒數1位);
(4)查詢:str.find(‘<待查詢字符串>')——返回查詢到的下標;
(5)替換:str.replace(‘<待替換字符串>',' <替換后的字符串>');
(6)分割:str.split(',')——根據','分隔成list;
(7)連接: ','.join(<list>)——把list連接成用','分隔的字符串;
(8)翻轉:strrev(<str>);
(9)復制:strncpy(str1,str2,n)——n表示復制指定長度;
(10)大小寫轉換:str.upper()、str.lower();
(11)長度:len(str);
3、列表(list)類型:list用[ ]標識,是一種有序的集合。從左到右索引默認0開始的,從右到左索引默認-1開始,下標可以為空表示取到頭或尾。
list常用操作:
(1)list類型定義:l = ['adam',95.5, 'lisa',85, 'bart',59];
(2)list訪問:l[3]、l[-2];
(3)list添加:l.insert(2,'paul')或直接l[4]=xxx賦值;
(4)list刪除:l.pop(2);
(5)list長度:len(l);
(6)list查詢:l.index(“<待查詢>”)——返回下標;
(7)list循環遍歷:for index, value in enumerate(l):
(8)兩個list相加合成一個:l1.extend(l2);
(9)list排序:l.sort(cmp=none, key=none, reverse=false);
(10)統計某個元素在list中出現的次數:l.count(<待查詢>);
(11)list連接和重復:加號(+)是列表連接運算符,星號(*)是重復操作;
注:python快速生成list方法:[x*(x+1) for x in range(1,100,2)]表示生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]
4、python元組(tuple)類型:tuple是另一種有序的列表,中文翻譯為“ 元組 ”。元組用”()”標識。內部元素用逗號隔開。但是元組不能二次賦值,相當于只讀列表。
tuple常用操作:
tuple 和 list 非常類似,但是,tuple一旦創建完畢,就不能修改了:
(1)創建:t = ('adam', 'lisa', 'bart')或t = ('adam',);
(2)訪問:t[0]、t[1:5];
(3)組合相加:t1+t2;
(4)刪除:del t1;
(5)長度:len(t1);
(6)最大值:max(t1);
(7)最小值:min(t1);
5、字典(dict)類型:字典是無序的對象集合。字典用”{ }”標識,字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
dict常用操作:
(1)創建:d = {key1 : value1, key2 : value2 };
(2)訪問:
①直接訪問:d[key1]、d[key2],這種訪問方式在key不存在時會報錯;
②安全訪問:d.get(key1, default=none),這種訪問方式,key不存在時返回默認值,默認值沒設定的情況下為none;
③不存在時set進去:d.setdefault(key1, default=none);
(3)修改:d[key1] = value1;
(4)刪除:
① d.clear(),清空字典所有條目,對象仍存在;
② del d,刪除字典對象;
(5)長度:len(d);
(6)返回所有鍵或值:d.keys()、d.values();
(7)把d2加入到d1:d1.update(d2);
(8)循環遍歷:
①for key, value in d.items():
②for key, value in d.iteritems():
③items()和iteritems()區別:
items()返回的是列表對象,而iteritems()返回的是iterator對象。例如:
print dic.items() #[('a', 'hello'), ('c', 'you'), ('b', 'how')]
print dic.iteritems() #<dictionary-itemiterator object at 0x020e9a50>
注:iteritor是迭代器的意思,一次返回一個數據項,直到沒有為止
(9)取兩個字典交集:dict(d1.items() & d2.items());
(10)復制:
① 直接賦值:a = b——其實就是對象的引用,兩個變量一模一樣;
② 淺拷貝:b = a.copy()——拷貝父對象,不會拷貝對象的內部的子對象;
③ 深拷貝:b = copy.deepcopy(a)——copy 模塊的deepcopy方法,完全拷貝了父對象及其子對象(兩個完全不同的變量);
淺復制原理:
深復制原理:
參考鏈接來自:http://www.ythuaji.com.cn/article/176238.html
6、集合(set)類型:如果我們只要dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重復,set就是這樣一種類似于list但值不允許重復的數據結構。
set常用操作:
(1)創建:s = set(['adam', 'lisa', 'bart', 'paul']);
(2)訪問:s[1]、s[2];
(3)添加:s.add(l);
(4)刪除set元素:s.remove(l);
三、與php數據結構的一些區別
1、如前言所述,python的變量數據結構在一開始時也不需要強制聲明定義,但一旦賦值后就確定了變量類型,除了簡單的數字四則運算能將str進行隱式轉換外,大部分不同變量類型直接的運算都需要手動進行變量類型的類型轉換。
2、對于php的數組類型,可以包含索引數組和關聯數組兩種,例如:
1
2
3
4
5
6
7
8
9
|
<?php $arr = array( 0 = > '1234' , 'a' = > 'bcde' , 2 = > 1234 , 'b' = > 5678 ); print_r($arr); ?> |
運行結果如下:
array
(
[0] => 1234
[a] => bcde
[2] => 1234
[b] => 5678
)
但是在python中,這種定義是不被允許的,python將php中的數組分成list(索引數組)和dict(關聯數組),二者不可合并在一起。
希望本文所述對大家python程序設計有所幫助。
原文鏈接:https://blog.csdn.net/dream_successor/article/details/88353380