Python內置數據結構-list、tuple、string

Python內置數據結構

分類

  • 數值型
    • int、float、complex、bool
  • 序列對象
    • 字符串 str
    • 列表 list
    • 元組 tuple
  • 鍵值對
    • 集 set
    • 字典 dict

數值型

  • 數值型
    • int、float、complex、bool都是類(class),1、5.0、1+2j都是對象即實例
    • int:在python3版本中表示長整型,沒有大小限制,受限制于內存區域大小
    • float:浮點數由整數部分和小數部分組成,支持十進制和科學計數法表示,在python中只有雙精度浮點數
    • complex:復數由實數和虛數部分組成,實數和虛數都是浮點數,例:3+4.2j
    • bool:int的子類,基友兩個實例True和False,分別代表1和0,可以直接和整數計算
  • 類型轉換
    • int(x) #返回一個整數
    • float(x) #返回一個浮點數
    • complex(x)/comples(x,y) #返回一個復數
    • bool(x) #返回布爾值,對應關系可查看真值表
  • 數字的處理函數
    • python中管與數學處理的模塊math需要單獨導入(import math),math.floor表示舍去小數部分的值取整,math.ceil表示只要小數位不是零則一律進1
    • int() #將括號內的浮點數小數點后的數值舍掉,只取整數部分
    • round() #這個函數去正式遵循四舍六入,當小數點后為5時,取離得最近的偶數值
    可以測試下如下代碼:
    - print(math.ceil(2.1))
    - print(math.floor(2.9))
    - round(2.5)
    - round(3.5)
    - round(3.4)
    - round(3.6)
    
    - min() #取括號內數字的最小值
    - max() #取括號內數字的最打值
    - pow(x,y) #取x的y次方
    - math.sqrt(9) #取就得0.5次方,也就是√-3
    - math.pi #取π的值3.141592653589793
    - math.e #取自然常數的值2.718281828459045
    • 轉換進制
      • bin() #轉換為二進制字符串
      • oct() #轉換位八進制字符串
      • hex() #轉換為十六進制字符串
  • 類型判斷
    • type(object),返回類型,而不是字符串 例:type(a)、type(‘b’)、type(123) type(1+True+3.0)返回的類型是浮點型,這是應為因為在數學計算中包含一個隱式轉換,由精度低的數項精度高的數轉換
    • isinstance(obj,class_or_tuple),判斷參數是不是后面其中一個的類型,返回布爾值 例:isinstance(6,str) isinstance(6,(str,bool,int,float))

列表(list)

  • 列表的特性
    • 一個隊列,排列整齊的隊伍
    • 列表里的個體稱為元素(item),有若干元素組成
    • 元素可以式任意的數字、字符串、對象、列表等
    • 列表內元素有順序,可以使用索引
    • 屬于線性數據結構
    • 使用[]表示,[]空的中括號表示空列表
    • 列表是可以變化的,可以增、刪、改、查和追加
  • 列表list、鏈表(linklist)、隊列(queue)、棧(stack)的差異
    • 列表是有序地,一個接一個排列的集合,每一個元素占據一個單位,就像書本一樣,一頁內容對應一個頁碼,可以通過索引來查找
    • 鏈表是有連接的,一個連一個的,好比手拉手,通過前一個元素可以找到下一個元素
    • 隊列可以是列表,也可以是鏈表,他可以項放行一樣先進先出,也可以像解散一樣后進先出
    • 棧 是以類似重疊的方式排列,就像摞盤子一樣是典型的后進先出隊列
  • 列表list定義、初始化
    • list() -> new empty list
    • list(iterable) -> new list initialized from iterable’s items(從可迭代的元素初始化列表)
    • 列表不能一開始就定義大小這是Python中的列表特性,它是可變化的
    • 列表的元素也可以是函數的結果
  • 列表索引訪問
    • 索引(index),也叫下標
    • 正索引:從左到右,從0開始,是列表中每一個元素的編號
    • 負索引:從右到左,從-1開始
    • 正負索引不能超超界,超界后報錯IndexError
    • 默認認為列表是從左往右排列的,左邊頭部右邊尾部,左邊下界右邊上界
    • 列表可以通過索引來訪問,格式為listname[index],index就是索引,是指某個元素在列表中的位置,默認從0開始
    In [4]: lst
    Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    In [5]:
    
    In [5]: lst[6]
    Out[5]: 6
    
    In [6]:
  • 列表查詢
    • index(valiue,[start,[stop]]) 1.通過值value,從指定區間查找列表的元素是否匹配 2.匹配第一個值就返回索引 3.匹配不到,顯示valueError
    • count(value) 返回列表中匹配到的值得次數
    • 時間復雜度 1.index和count的方法復雜度是O(n),O(1)這個是表示效率最高,一步操作;count的時間復雜度是O(n)表示所有元素查看一遍或者叫遍歷,有n個元素就做n次操作 2.隨著數據規模的增大,效率會越來越低
    • 函數len() 查詢項目中元素的個數,是公共的內建函數,可以查詢類似集合的元素數量
  • 查詢幫助
    • 查看幫助文檔
    • 查看官方文檔
    • 在ipython中通過help(keyword)
      • keyword可以是函數、類、對象、變量、方法名
  • 列表元素修改 當操作修改列表完成時若返回none值則沒有新列表生成,是為就地修改
    • 索引訪問修改 list[index]=value,索引不能超界,否則就提示異常 -列表增加,插入元素
      1. append(object) #尾部追加,不會生成新的列表,時間復雜度O(1)
      2. insert(index,object) #在指定索引處插入一個值,索引開始到最后的元素整體后移一個單位,索引超下界會在頭部追加,超上界尾部追加。由于操作會硬氣內存結構的變化,所以一般不使用
      3. extend(iteratable) #列表擴展:將可迭代對象的元素追加進來,就地修改
      4. list1+list2 #連接操作,將兩個列表連接起來,產生新表,原列表不變
      5. list*num #重復操作,將本列表元素重復n次,返回新的列表
    • 列表刪除元素
      1. remove(value) #從左往右查找第一個匹配的值并移除,就地修改
      2. pop([index]) #不指定索引,從列表哦尾部彈出一個元素,或者制定索引,從指定索引出彈出元素
      3. clear() #清楚對象列表中的所有元素,剩下一個空列表
    • 列表其他操作
      1.reversed() #將列表中元素顛倒順序,就地修改
      2.sort(key=None,reverse=False) #對列表驚醒排序,就地修改,默認升序;reverse=True,就是反轉并按降序排列;key可以制定一個函數,指定key如何排序
      3. in 查看一個元素在不在一個列表中;而for x in [1,2,3,4]表示從列表中取出元素附給x
  • 列表復制
  • copy() #shadown cpoy(影子復制),也叫淺拷貝,遇到引用類型,只是復制了一個引用,如果引用的對象被修改,則兩個列表所引用的元素都會改變,
  • 深拷貝,copy模塊提供深拷貝,深copy會在內存中新建一個列表,并賦值

隨機數

random模塊 1.random.randint(a,b) #返回[a,b]之間的整數 2.random.choice(seq) #從非空序列中隨機挑選一個元素 3.randrange([start,]stop[,step]) #從指定按制定奇數遞增的集合中獲取一個隨機數,默認奇數為1 4.random.shuffle(list) #就地打亂列表元素

練習

1.求100內的素數

lst=[2]
for i in range(3,100,2):
    for n in lst:
        if i%n ==0:
            break
    else:
        #print(i)
        lst.append(i)   #將計算出的素數追加到素數列表中
print(lst)

import math 
pn=[]
for x in range(3,1000,2):
    for i in pn:
        if x%i==0:
            sign=True
            break
        if i>=math.ceil(x**0.5):
            sign=False
            break
    if not sign:   #只有是真值的時候,才會執行及里邊的語句塊,當flag為False,not flag是True,程序才會進去if內部語句塊,否則就繼續下面的語句
        #print(x)
        pn.append(x)
print(pn)

2.計算楊輝三角的前六行

triangle=[[1],[1,1]]
for i in range(2,6):
    p = triangle[i-1]
    cur=[1]
    for j in range(0,i-1):
        cur.append(p[j]+p[j+1])
    cur.append(1)
    triangle.append(cur)
print(triangle)

triangle=[]
for i in range(6):
    if i==0:
        lr=[1]
        triangle.append(lr)
    else:       
        p=triangle[i-1]
        cur=[1]
        for j in range(0,i-1):
            cur.append(p[j]+p[j+1])
        cur.append(1)
        triangle.append(cur)
print(triangle)

triangle=[]
for i in range(6):
    if i==0:
        lr=[1]
        triangle.append(lr)
    else:
        p=[0]
        p.extend(triangle[i-1])
        p.append(0)
        cur=[]
        for j in range(0,i+1):
            cur.append(p[j]+p[j+1])
        triangle.append(cur)
print(triangle)

triangle=[]
for i in range(6):
    if i==0:
        lr=[1]
        triangle.append(lr)
    elif i==1:
        lr=[1,1]
        triangle.append(lr)        
    else:       
        p=triangle[i-1]
        cur=[1]
        x=1
        while x<=(i-1):
            cur.append(p[x-1]+p[x])
            x+=1
        cur.append(1)
        triangle.append(cur)
print(triangle)

方法二

ol=[]
nl=[1]
print(nl)
for i in range(1,6):
    ol=nl.copy()
    ol.append(0)
    nl.clear()
    offset=0
    while offset<=i:
        nl.append(ol[offset-1]+ol[offset])
        offset+=1
    print(nl)

元組(tuple)

元組是一個有序的元素組成的集合,使用()表示,元組是不可變對象,包括元祖的的長度和元素本身。如果元祖中的元素是一個引用對象,當引用對象本身發生變化是,元組中的元素才會發生變化。

  • 定義
    • tuplename=tuple() #定義一個空元組,括號里可以是可迭代對象、數字、字符串、列表等
    • tuplename=tuple(2,) #當定義一個元素的元組時,要在元素后加個逗號,否則會提示括號所在的類不是一個可迭代對象
    • tuple和list一樣,可以使用‘+’連接兩個不同的元組,創建一個新的元組打印出來,也可以通過‘*’創建一個被乘的元組重復幾次的新元組打印出來。
    • 元祖也支持索引訪問,包括正負索引,其訪問的方式和列表一樣,但是索引不能超界,否則引發異常
    • tuplename.index(9) #在tuplename這個元組中查看9的索引,會返回從左到右最近的匹配到的9的索引,匹配不到就返會valueerror。
    • tuplename.count(9) #在tuplename這個猿族中查詢9這個值在元組中出現了幾次
    • len(tuplename) #查詢元祖的長度或者說是元組中元素的個數
    • 元組類似于只讀權限的文件,這可以讀取,不能增改刪,只能刪除整個元組
  • 命名元組namedtuple
    • namedtuple使用時需要執行命令“from collections import namedtuple”
    • namedtuple(typename,field_names(可以是空格或者逗號分隔的字段的字符串,也可以是字段的列表),verbose=FaLse,rename=False) #命名元組,返回元組的子類,并定義字段 例: “` In [2]: from collections import namedtuple
      In [3]: Point=namedtuple('_Point',['x','y'])
      
        In [4]: p=Point(11,22)
      
        In [5]: p.x
        Out[5]: 11
      
        In [6]: p.y
        Out[6]: 22
      
        ```
  • 練習
    • 以此接收用戶輸入的3個數,排序后打印
      1. 轉換int后,判斷大小排序
      2. 使用max函數
      3. 使用列表的sort方法
      4. 冒泡法

字符串

字符串是有序的字符集合或者稱字符序列,支持使用索引訪問,是一個可迭代的對象

  • 字符串join連接 python種特殊字符需要轉義后使用
    例:
    In [15]: lst
    Out[15]: ['1', '2', '3']
    
    In [16]: print('/'.join(lst))
    1/2/3
    
    In [17]: print('\\'.join(lst))
    1\2\3
    
    In [18]: print('"'.join(lst))
    1"2"3
    • 連接符 和列表的用法一樣,在這里是將兩個字符串連接到一起返回一個新字符串
  • 字符串分割 1.split系:將字符分割成若干字符串,并返回列表。
    格式
    - (string's name).split(sep=None,maxsplit=-1)
    分割時時從左向右sep制定分割字符串,默認時空白字符串作為分隔符;maxsplit制定分割次數,-1表示便利整個字符串。
    - (string's name).rsplit(sep=None,maxsplit=-1)
    從右向左
    - (string's name).splitlines([keepends])
    按照行來切分字符串,keepends指的是是否保留行分隔符(\n、\r\n、\r等)

    2.partittion系:將字符串按照分隔符分成兩段,放回這兩段和分割符的元組

    - partition(sep(必須指定))
        從左到右,遇到分隔符就把字符串分成兩部分,返回頭(head)、分隔符、尾(tail)三部分的三元組;如果沒有找到分隔符,就返回頭、2個空元素的三元組
    - rpartition(sep)
        從右到左,功能同上
  • 字符串大小寫
    • upper() 全大寫
    • lower() 全小寫
    • swapcase() 交互大小寫,就是大寫變小寫,小寫變大寫。
  • 字符串排版
    • title 標題的每個單詞首字母大寫
    • capitalize 第一個單詞首字母大寫
    • center(width[,fillchar]) 打印字符串時居中打印,用多少個字符的寬度如果字符串不夠用某個字符填充,默認字符是空格
    • zfill(width) 右對齊打印,左邊字符不夠的用0填充
    • ljust/rjust(width[,fillchar]) 左/右對齊打印
  • 字符串修改
    - replace(old,new[,count]) 替換
        在字符串中找到指定字符串,替換為新字符串,返回新字符串,count表示替換幾次
    - strip([chars]) 去除
        從字符串兩端去除指定字符集chars中的所有字符串,如果chars沒有指定則去除空白字符,同樣有兩種變體:lstrip/rstrip 從左/右開始去除
    - find(sub[,start[,end]]) 查找字符串
        在指定區間從左到右查找子串sub,找到則返回索引,沒有就返回-1
        變體rfind:從右到左查找
    - index(sub[,start[,end]])  查找字符串
        在指定區間從左到右查找子串sub,找到則返回索引,沒有就返回ValueError
        變體rindex:從右到左查找
    - count(sub[,start[,end]]) 統計
        在指定區間從左到右統計子串sub出現的次數
    - endwith/startwith([char,start[,end]]) 字符串判斷
        在指定的區間中,字符串是否以指定的字符串開頭或者結尾,返回bool值
    - ismetacharacters() 判斷字符串有那些字符組成
        metacharacters可以時alpha、num、decimal、digit、dentifier、lower、upper、space
  • 字符串格式化 字符串格式化是指將字符串以特定的輸出樣式輸出的書法
  1. join連接只能使用分隔符,但是連接的對象必須是可迭代對象
  2. ’+‘連接字符串比較方便,但是只能連接字符串
  • printf style
    在python2.5版本之前只能使用printf style(C語言風格)的方式來格式化
    格式要求
        占位符,使用%和格式字符組成
            1.s掉用str()表示字符串;r調用repr(),表示對象通過repr函數轉換為字符串;d調用int(),表示數字
            2. 占位符中汗可以插入修飾字符,例如%03d表示打印的字符站三個字符的位置,不夠的前面用0補齊
  • python自用的格式化字符串的語法
    '{}{xxx}'.format(*args,*kwargs)
            1. args是位置參數,是個元組
            2. kwargs是關鍵字參數,是個字典
            3. 大括號表示占位符
            4. {}表示按照順序匹配位置參數,{n}表示取位置參數索引n的值
            5. {{}}表示打印大括號
            6. {xxx}表示在關鍵字仲搜索名稱一致的
            7. {lst[0]}表示訪問對象元素
            8. {p.x}表示對象屬性訪問
        例:
        '{}:{}'.format('192.168.1.100',8888)  按位置參數匹配
        '{server}{1}:{0}'.format(8888,'192.168.1.100',server='Webserver') 匹配關鍵字參數或命名參數
        對齊
        '{0}*{1}={2:<2}'.format(3,2,3*2)
        '{0}*{1}={2:<02}'.format(3,2,3*2)
        '{0}*{1}={2:>02}'.format(3,2,3*2)
        '{:^30}'.format('Internet Data Center') 表示占用30個字符居中對齊,不夠的用空白字符填充
        '{=:^30}'.format('Internet Data Center')  表示占用30個字符居中對齊,不夠的用=字符填充
        進制轉換
        '{0:d/x/o/b/X}'.format(99)   d表示十進制,x/X表示十六進制小/大寫,o表示八進制,b表示二進制

練習

  • 用戶輸入一個數字
    • 判斷是幾位數
    • 打印每一位數重復次數
    • 按照個十百千萬順序打印每一位上的數字
num=''
while True:
    num=input('Enter:').strip()
    if num.isdigit():
        break
    else:
        print('please Enter number')

count=[0]*10

for i in range(10):
    count[i]=num.count(str(i))
for i in range(10):
    if count[i]:
        print(i,count[i])
lst=list(num)
lst.reverse()
print(lst)
  • 輸入五個數字,打印每個數字的位數,將這些數字按升序排列打印
列表排序
n=''
lst=[]
wsl=[]
c=0
while c<=4:
    n=input('Enter:')    
    lst.append(int(n))
    wsl.append(len(n))
    c+=1
print(wsl)
lst.sort()
print(lst)

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87482

(0)
KX_ilKX_il
上一篇 2017-09-23 10:37
下一篇 2017-09-23 15:11

相關推薦

  • 函數

    函數 數學定義:y=f(x),y是x的函數,x是自變量 Python函數 有若干個語句塊,函數名稱,參數列表構成,它是組織代碼的最小單元 完成一定作用 函數的作用 結構化編程對代碼的最基本的封裝,一般按照功能組織一段代碼 封裝的目的為了復用,減少了冗余代碼 代碼更加簡潔美觀,更加易讀 函數的分類 內建函數,如max(),reversed()等 庫函數,如ma…

    2018-04-16
  • Python裝飾器各種類型總結

    寫了一篇裝飾器的總結,分析了不同類型的裝飾器的應用場景 http://blog.csdn.net/yhy1271927580/article/details/72758577

    Python干貨 2017-05-26
  • python基礎

      shell作業 1. 取出文件基名 ????法一:cat 1.txt | egrep -o “[^/]+$” ????法二:awk -F/ ‘{print $NF}’ 1.txt 2. 取ip地址 ????法一:ifconfig eth0 | grep “inet addr” | awk ‘{print $2}’ | cut -d: -f2 ?…

    2017-09-17
  • Python函數式編程指南:目錄和參考

    目錄: 概述 這一篇簡要地描述了函數式編程和一些相關的概念。 函數 這一篇展示了關于函數可能不常用到的部分特征并嘗試引導諸位使用函數式的思維解決問題,并介紹了諸多有用的內建函數。 迭代器 這一篇介紹了迭代器以及Python對迭代器的語法級的支持,還包括了內置模塊itertools的介紹。 生成器 這一篇介紹了自定義的迭代器——生成器,并展示了生成器的用途和使…

    Linux干貨 2015-03-11
  • Python數據結構

    數據結構個人總結,方便以后查找。

    Python筆記 2018-04-01
  • Python 部分知識點總結(九)

    此篇博客只是記錄第十一周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-05-21
欧美性久久久久