python基礎(三)python數據類型

1、數據類型python

    計算機顧名思義就是能夠作數學計算的機器,所以,計算機程序理所固然地能夠處理各類數值。可是,計算機能處理的遠不止數值,還能夠處理文本、圖形、音頻、視頻、網頁等各類各樣的數據,不一樣的數據,須要定義不一樣的數據類型。mysql

2、整形和浮點型git

    整形也就是整數類型(int)的,在python3中都是int類型,沒有什麼long類型的,好比說存年齡、工資、成績等等這樣的數據就能夠用int類型,有正整數、負整數和0,浮點型的也就是小數類型(folat)的,帶小數點的sql

  • age = 18
  • b = -50
  • c = 5.222

3、布爾類型數據庫

    什麼是布爾類型,布爾類型就是真和假,只有這兩種,True和Fasle,非真即假,除了True和False還有0和1,非0即真api

  • a = True
  • b = False

4、字符串和字符串操做數組

    上面說了存數字,那要是想存本身的名字呢,那用int類型的就不行了,就有另外一種數據類型應運而生,就是字符串,它能夠存任意類型的字符串,好比名字,一句話等等。oracle

  • name = 'Sriba'
  • msg = 'Welcome to my blog.'

    字符串還有不少內置的方法,對字符串進行操做,經常使用的方法以下,下面註釋帶有是否的,返回的都是一個布爾值:app

  • name = 'my \t name is {name},age is {age}.'
  • print(name.capitalize())#首字母大寫,不會改變字符串原值
  • print(name.casefold())#首字母小寫
  • print(name.center(50,'-'))#50個-,把name放中間
  • print(name.startwith('m'))#是否以xx開頭
  • print(name.endswith('u'))#是否以x結尾
  • print(name.expandtabs(30))#補\t的次數
  • print(name.find('n'))#查找字符串的索引
  • print(name.format(name='niuniu',age=18))#這個是格式字符串
  • print(name.format_map({'name':'niuniu','age':19}))#這個也是格式化字符串,後面跟的是一個字典,字典在後面也會寫
  • print('abA123'.isalnum())#是否包含數字和字母
  • print('abA'.isalpha())#是不是英文字母
  • print(name.count('n'))#統計某個字符串出現的次數
  • print(name.index('n'))#返回某個元素第一次出現的下標
  • by_name = name.encode()#utf8編碼轉化爲二進制
  • by_name.decode()#bytes轉換字符串
  • print('122'.isdigit())#是不是數字
  • print('aa'.isidentifier())#是不是一個合法的變量名
  • print('aa'.islower())#是不是小寫字母
  • print('AA'.isupper())#是不是大寫字母
  • print(''.isspace())#是不是空格
  • print('Loadrunner Book'.istitle())#是否是一個標題,判斷首字母是否大寫
  • print('+'.join(['hehe','haha','ee']))#拼接字符串
  • print(name.lower())#變成小寫
  • print(name.upper())#變成大寫
  • print('\nmysql \n'.lstrip())#默認去掉左邊的空格和換行
  • print('\nmysql \n'.rstrip())#默認去掉右邊的空格和換行
  • print('\nmysql \n'.strip())#默認去掉兩邊邊的空格和換行
  • p = str.maketrans('abcdefg','1234567')#前面的字符串和後面的字符串作映射
  • print('cc ae gg'.translate(p))#輸出按照上面maketrans作映射後的字符串
  • print(type(name))#獲取變量類型
  • print(num.isinstance(num,str))#判斷變量類型
  • #下面是反解
  • new_p = str.maketrans('1234567','abcdefg')
  • print('cc ae gg'.translate(new_p))
  • print('mysql is db.'.replace('mysql','oracle',1))#替換字符串
  • print('mysql is is db'.rfind('is'))#返回最右邊字符的下標
  • print('1+2+3+4'.split('+'))#按照xx切割字符串,返回一個list
  • print('1+2+3\n1+2+3+4'.splitlines())#按照換行符分割,返回一個list
  • print('Abcdef'.swapcase())#大小寫互相轉換     

5、列表和列表操做ide

    上面說了字符串和整形,那如今要是想存一個班級的人的名字,這個班有200我的,怎麼存呢,用字符串的話,那就是names = 'marry lily king .....'這樣,可是這樣存是能夠存,那要是想取到某我的的名字怎麼取呢,爲了解決這個問題,又有一種新的數據類型應運而生,那就是列表,這也是咱們在之後的開發過程當中,最經常使用的數據類型之一,列表也叫數組,列表定義,使用[]便可;列表裏面能夠再套列表,一個裏面套一個列表,叫二維數組;一個裏面套一個列表,裏面的列表再套一個列表,這個叫三維數組,套幾層就是幾維,定義格式以下:

  • list1 = [1,2,3,4] #一個普通的數組
  • list2 = ['marry','lily',[50,'monkey']] #二維數組
  • list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三維數組

    經過下標訪問列表中的元素,下標從0開始計數,也就是說,好比說一個列表,有個5元素,那麼它第一個元素下標就是0,第二個就是1,以此類推,字符串也有下標,和列表同樣

    對列表的操做,分如下幾種增、刪、改、查

      增:

  • msg = '你好'
  • name = ['andashu','cc','niuniu']
  • name.append(msg)#從最後面開始插入
  • name.insert(1,msg) #從指定位置插入,這個1表明下標            
  • print(name)

      改:

  • msg = '你好'
  • name = ['andashu','cc','niuniu']
  • name[1] = 'baby' #修改指定位置的值

      查:

  • msg = '你好'
  • name = ['andashu','cc','niuniu']
  • print(name[0])#獲取第一個元素
  • print(name[-1])#-1表明最後一個元素

      刪:

  • msg = '你好'
  • name = ['andashu','cc','niuniu']
  • name.remove('baby')#刪除指定的值
  • del name[0]#刪除指定位置的值
  • name.pop()#不傳入下標的話,刪除最後一個值,傳入下標刪除指定位置的值
  • name.clear()#清空列表

    列表操做,一些內置的方法:

  • msg = '你好'
  • name = ['andashu','cc','niuniu']
  • name2 = [1,2,3,4,['hehe','haha']]
  • print(name.index('cc'))#取索引
  • print(name.count('cc'))#取cc出現的次數
  • name.clear()#清空列表
  • print(name.sort())#排序,根據阿斯克碼來排序
  • name.extend(name2)#擴展列表,也就是把name2的值加到name裏面
  • name.reverse()#反轉數組,會改變原數組的值

    切片,切片也就是另外一種方式獲取列表的值,它能夠獲取多個元素,能夠理解爲,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值,格式是name[1:10],好比說要獲取name的第一個元素到第五個元素,就能夠用name[0:6],切片是不包含後面那個元素的值的,記住顧頭不顧尾;前面的下標若是是0的話,能夠省略不寫,這樣寫,name[:6],切片後面還有能夠寫一個參數,叫作步長,也就是隔多少個元素,取一次,默承認以不寫,也就是隔一個取一次,切片操做也能夠對字符串使用,和列表的用法同樣,實例以下:

  • names = ['andashu','cc','niuniu','amy','lily']
  • names[1:4]  #取下標1至下標4之間值,包括1,不包括4
  • names[1:-1] #取下標1至-1的值,不包括-1
  • names[0:3] #取下標0至3的值,不包括3
  • names[:3] #取下標0至3的值,不包括3,和上面的效果同樣,0能夠省略不寫
  • names[2:]#取從第二個下標開始的後面全部元素
  • #下面是加上步長的
  • nums = [1,2,3,4,5,6,7,8,9,10]
  • nums[::2]#這個表明取全部的元素,而後每隔2個元素取一個
  • >>> 1 3 5 7 9 #輸出的結果
  • nums[1:8:3]#表明取第二個元素開始,到第八個結束,隔3個取一次
  • >>>[2,5] #輸出結果

6、元組

    元組其實和列表同樣,不同的是,元組的值不能改變,一旦建立,就不能再改變了,好比說,要存數據庫的鏈接信息,這個鏈接信息在程序運行中是不能被改變的,若是變了那數據庫連不上了,這樣的就可使用元組了,元組的定義方式是用(),小括號;元組只有兩個方法,那就是count和index

  • mysql_coon = ('192.168.1.109','root','123456',3306,'my_db')#定義元組

7、字典

    上面說了,整形、浮點型、字符串、列表和元組,下面說個新的數據類型,字典,字典也是咱們開發過程當中最經常使用的一種數據類型;想一個問題,如今要存整個北京市的全部人的信息,每一個人有姓名、年齡、性別、家庭住址、學歷等等,那要是用列表存的話,那就得定義N多個數組,而後存上每一個人的信息,這時候又有一種新的數據類型出現了,那就是字典,dict,全稱是dictionary,它具備極快的查找速度;字典是一種key-value的數據類型,好比說要存每一個人的信息,那麼每一個人的編號就是key,value就是每一個人的信息,這樣的話,一個字典就能存全部人的信息了。字典的定義使用{},大括號,每一個值用「,」隔開,key和value使用「:」分隔。

    舉個列子,若是用列表存每一個人的信息的話,須要用兩個列表,一個存人名,一個存信息:

  • names = ['marry','amy','lily']
  • infos = [[18,18612512981,'北京'],[20,18612512991,'山東'],[25,18612532981,'河南']]

        給一個名字,若是要查他的對應信息,那就要先從names裏面找到它的位置,而後再從infos中找到它的信息,若是這個列表越長,那麼它的查詢速度越慢。

        若是用字典實現的話,只須要一個名字和信息對應的一個表,這樣就很快的根據名字找到它對應的信息,不管這個表有多大,查找速度都不會變慢。

  • infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
  • infos['marry'] #取marry的信息

        爲何dict查找速度這麼快?由於dict的實現原理和查字典是同樣的。假設字典包含了1萬個漢字,咱們要查某一個字,一個辦法是把字典從第一頁日後翻,直到找到咱們想要的字爲止,這種方法就是在list中查找元素的方法,list越大,查找越慢。

        第二種方法是先在字典的索引表裏(好比部首表)查這個字對應的頁碼,而後直接翻到該頁,找到這個字。不管找哪一個字,這種查找速度都很是快,不會隨着字典大小的增長而變慢,這種就是字典的實現方式。

    字典的特性:

        字典是無序的,由於它沒有下標,用key來當索引,因此是無序的

        字典的key必須是惟一的,由於它是經過key來進行索引的,因此key不能重複,天生就去重

    字典的增刪改查:

    增:

  • infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
  • infos['andy']=[22,18712512981,'河北']#增長

    修改:      

  • infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
  • infos['marry':[38,18612512981,'北京']]

    刪除:

  • infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
  • infos.pop('marry')#標準的刪除方法
  • del infos['marry']#使用del方法刪除
  • info.popitem() #隨機刪除一個值

    查詢:

  • infos = {'marry':[18,18612512981,'北京'],'amy':[20,18612512991,'山東'],'lily':[25,18612532981,'河南']}
  • infos.get('maryy')#獲取marry的信息,這種方式若是key不存在的話,會返回None
  • infos['marry']#獲取marry的信息,這種方式若是key不存在的話,會報錯
  • 'marry' in infos #判斷marry是否在這個字典中,返回True或者False

   字典的內置方法:

  • dic = {'stu1':'cc','stu2':'andashu','stu3':'niuniu'}
  • print(dic.values())#打印全部value
  • print(dic.keys())#打印全部的key
  • print(dic.setdefault('stu1','fengluo'))#若是這個key存在的話,那就不動它,不存在的話,添加一個
  • dic2 = {'stu1':'sriba','stu10':'baidu'}
  • dic.update(dic2)#更新字典值,若是key存在的話,就更新,不存在的話就添加
  • print(dic.items())#字典轉換成一個list

    循環字典:

  • dic = {'stu1':'cc','stu2':'andashu','stu3':'niuniu'}
  • for k in dic:
  •         print(k,dic[k])#打印key和value的值,推薦使用這種方式,速度快
  • for k,v in dic.items():
  •         print(k,v)#打印key和value的值,這種方式不推薦,由於會把字典轉換成列表,效率不高

8、數據運算

算數運算符

操做符 描述 例子
+ 加法 - 對操做符的兩側增長值 a + b = 30
- 減法 - 減去從左側操做數右側操做數 a - b = -10
* 乘法 - 相乘的運算符兩側的值 a * b = 200
/ 除 - 由右側操做數除以左側操做數 b / a = 2
% 模 - 由右側操做數和餘返回除以左側操做數 b % a = 0
** 指數- 執行對操做指數(冪)的計算 a**b = 10 的冪 20
// 地板除 - 操做數的除法,其中結果是將小數點後的位數被除去的商 9//2 =  4 而 9.0//2.0 = 4.0

比較運算符

運算符 描述 實例
== 檢查兩個操做數的值是否相等,若是是則條件變爲真 (a == b) 爲false
!= 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真 a != b) 爲 true.
> 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立 (a > b) 不爲 true.
< 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立 (a < b) 爲 true.
>= 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立 (a >= b) 不爲 true.
<= 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立 (a <= b) 爲 true.

Python賦值運算符

運算符 描述 示例
= 簡單的賦值運算符,賦值從右側操做數左側操做數 c = a + b將指定的值 a + b 到  c
+= 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 c += a 至關於 c = c + a
-= 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 c -= a 至關於 c = c - a
*= 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 c *= a 至關於 c = c * a
/= 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 c /= a 至關於c = c / a
%= 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 c %= a 至關於 c = c % a
**= 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 c **= a 至關於 c = c ** a
//= 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 c //= a 至關於 c = c // a

邏輯運算符

運算符 描述 示例
and 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 (a and b) 爲 true.

or 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 (a or b) 爲 true.

not 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。 not(a and b) 爲 false.

身份運算符

運算符 描述 示例
is is判斷兩個標識符是否引用自一個對象 x is y,若是id(x)等於id(y) ,返回True
is not is not判斷兩個標識符是否引用不一樣的對象 x is not y,若是id(x)不等於id(y),返回True

9、模塊初識

    模塊是導入別人已經寫好的python文件,裏面已經有一些寫好的功能,能夠直接拿來使用,使用import 關鍵字導入須要的模塊,導入模塊時,默認會在當前目錄下去尋找該文件,若是當前目錄下沒有的話,回去python的環境變量中找,若是找不到就報錯,下面有一些簡單的python標準模塊,os和sys模塊:

  •     import sys,os #導入sys模塊和os模塊
  •     arg = sys.argv #獲取傳入的參數,第一個參數是文件名,返回的是一個list
  •     sys.path #python的環境變量,返回的也是一個list
  •     os模塊是和操做系統相關的命令
  •     os.system('ls')#執行操做系統命令,返回的是一個執行結果,成功或者失敗,成功返回0
  •     os.popen('ls') #這個也是執行操做系統的命令,和system區別就是,這個命令返回的是執行結果,也就是返回了什麼東西,而不是返回的執行成功或者失敗,讀取內容需用read方法
  •     os.popen('ls').read()
  •     os.mkdir('test')#建立文件夾
  •     os.path.sep#路徑分隔符,根據不一樣的操做系統,分割符會變化

10、三元運算符

    三元運算符就是在賦值變量的時候,能夠直接給它加上判斷,而後賦值

    res = 值1 if 條件 else 值2
    a = 5
    b = 4
    c = a if a>b else b #若是a大於b的話,c=a,不然c = b ,若是不用三元運算符的話,就得下面這麼寫
    if a>b:
        c = a
    else:
        c = b

    固然三元運算符也能夠用在列表和字典中,這麼寫的話,就比較簡單了,不過若是搞不明白三元運算符的話,仍是不用爲好

    nums = [1,2,3,4,5,6,7,8,9,10]
    odd_num = [num for num in nums if num%2!=0]#循環nums,若是nums裏面的值,不能被2整除的話,就寫到odd_num這個list中,也就是算奇數,等於下面這麼寫
    odd_num = []
    for num in nums:
        if num % 2 !=0:
            odd_num.append(num)
相關文章
相關標籤/搜索