最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Python四大數(shù)據(jù)類型實(shí)例分析

這篇文章主要介紹“Python四大數(shù)據(jù)類型實(shí)例分析”,在日常操作中,相信很多人在Python四大數(shù)據(jù)類型實(shí)例分析問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”P(pán)ython四大數(shù)據(jù)類型實(shí)例分析”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為香河企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,香河網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

基本數(shù)據(jù)類型

數(shù)值型

Python 中的數(shù)據(jù)皆是對(duì)象,比如被熟知的 int 整型對(duì)象、float 雙精度浮點(diǎn)型、bool 邏輯對(duì)象,它們都是單個(gè)元素。舉兩個(gè)例子。

前綴加 0x,創(chuàng)建一個(gè)十六進(jìn)制的整數(shù):

0xa5 # 等于十進(jìn)制的 165

使用 e 創(chuàng)建科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù):

1.05e3 # 1050.0

容器型

可容納多個(gè)元素的容器對(duì)象,常用的比如:list 列表對(duì)象、 tuple 元組對(duì)象、dict 字典對(duì)象、set 集合對(duì)象。Python 定義這些類型的變量,語(yǔ)法非常簡(jiǎn)潔。

舉例如下。

使用一對(duì)中括號(hào) [],創(chuàng)建一個(gè) list 型變量:

lst = [1,3,5] # list 變量

示意圖看出,右側(cè)容器為開(kāi)環(huán)的,意味著可以向容器中增加和刪除元素:

Python四大數(shù)據(jù)類型實(shí)例分析

使用一對(duì)括號(hào) (),創(chuàng)建一個(gè) tuple 型對(duì)象:

tup = (1,3,5) # tuple 變量

示意圖看出,右側(cè)容器為閉合的,意味著一旦創(chuàng)建元組后,便不能再向容器中增刪元素:

Python四大數(shù)據(jù)類型實(shí)例分析

但需要注意,含單個(gè)元素的元組后面必須保留一個(gè)逗號(hào),才被解釋為元組。

tup = (1,) # 必須保留逗號(hào)

否則會(huì)被認(rèn)為元素本身:

In [14]: tup=(1)
   ...: print(type(tup)) 

使用一對(duì)花括號(hào) {} 另使用冒號(hào) :,創(chuàng)建一個(gè) dict 對(duì)象:

dic = {'a':1, 'b':3, 'c':5} # dict變量

字典是一個(gè)哈希表,下面的示意圖形象的表達(dá)出字典的 “形”。

Python四大數(shù)據(jù)類型實(shí)例分析

僅使用一對(duì)花括號(hào) {},創(chuàng)建一個(gè) set 對(duì)象:

s = {1,3,5} # 集合變量

Python 的容器類型,list、dict、tuple、set 等能方便地實(shí)現(xiàn)強(qiáng)大的功能,下面給出幾個(gè)案例。

1. 去最求平均

去掉列表中的一個(gè)最小值和一個(gè)最大值后,計(jì)算剩余元素的平均值。

def score_mean(lst):
   lst.sort()
   lst2=lst[1:-1]
   return round((sum(lst2)/len(lst2)),1)

lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8]
score_mean(lst) # 9.1

代碼執(zhí)行過(guò)程,動(dòng)畫(huà)演示:

Python四大數(shù)據(jù)類型實(shí)例分析

2. 打印 99 乘法表

打印出如下格式的乘法表:

1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

一共有 10 行,第 i 行的第 j 列等于:j*i,其中:

  • i 取值范圍:1<=i<=9

  • j 取值范圍:1<=j<=i

根據(jù)“例子分析”的語(yǔ)言描述,轉(zhuǎn)化為如下代碼:

In [13]: for i in range(1,10):
   ...:     for j in range(1,i+1):
   ...:         print('%d*%d=%d'%(j,i,j*i),end='\t')
   ...:     print()

3. 樣本抽樣

使用 sample 抽樣,如下例子從 100 個(gè)樣本中隨機(jī)抽樣 10 個(gè)。

from random import randint,sample
lst = [randint(0,50) for _ in range(100)]
print(lst[:5])# [38, 19, 11, 3, 6]
lst_sample = sample(lst,10)
print(lst_sample) # [33, 40, 35, 49, 24, 15, 48, 29, 37, 24]

字符串

注意 Python 中沒(méi)有像 C++ 表示的字符類型(char),所有的字符或串都被統(tǒng)一為 str 對(duì)象。如單個(gè)字符 c 的類型也為 str。

str 類型會(huì)被經(jīng)常使用,先列舉 5 個(gè)被高頻使用的方法。

strip 用于去除字符串前后的空格:

In [1]: '  I love python\t\n  '.strip()
Out[1]: 'I love python'

replace 用于字符串的替換:

In [2]: 'i love python'.replace(' ','_')
Out[2]: 'i_love_python'

join 用于合并字符串:

In [3]: '_'.join(['book', 'store','count'])
Out[3]: 'book_store_count'

title 用于單詞的首字符大寫(xiě):

In [4]: 'i love python'.title()
Out[4]: 'I Love Python'

find 用于返回匹配字符串的起始位置索引:

In [5]: 'i love python'.find('python')
Out[5]: 7

舉個(gè)應(yīng)用字符串的案例,判斷 str1 是否由 str2 旋轉(zhuǎn)而來(lái)。

字符串 stringbook 旋轉(zhuǎn)后得到 bookstring,寫(xiě)一段代碼驗(yàn)證 str1 是否為 str2 旋轉(zhuǎn)得到。

轉(zhuǎn)化為判斷:str1 是否為 str2+str2 的子串。

下面函數(shù)原型中,注明了每個(gè)參數(shù)的類型、返回值的類型,增強(qiáng)代碼的可讀性和可維護(hù)性。

def is_rotation(s1: str, s2: str) -> bool:
   if s1 is None or s2 is None:
       return False
   if len(s1) != len(s2):
       return False

   def is_substring(s1: str, s2: str) -> bool:
       return s1 in s2
   return is_substring(s1, s2 + s2)

測(cè)試函數(shù) is_rotation:

r = is_rotation('stringbook', 'bookstring')
print(r)  # True

r = is_rotation('greatman', 'maneatgr')
print(r)  # False

代碼執(zhí)行過(guò)程,動(dòng)畫(huà)演示:

55555

字符串的匹配操作除了使用 str 封裝的方法外,Python 的 re 正則模塊功能更加強(qiáng)大,寫(xiě)法更為簡(jiǎn)便,廣泛適用于爬蟲(chóng)、數(shù)據(jù)分析等。

下面這個(gè)案例實(shí)現(xiàn):密碼安全檢查,使用正則表達(dá)式非常容易實(shí)現(xiàn)。

密碼安全要求:

  • 要求密碼為 6 到 20 位;

  • 密碼只包含英文字母和數(shù)字。

import re
pat = re.compile(r'\w{6,20}') # 這是錯(cuò)誤的,因?yàn)?nbsp;\w 通配符匹配的是字母,數(shù)字和下劃線,題目要求不能含有下劃線
# 使用最穩(wěn)的方法:\da-zA-Z 滿足“密碼只包含英文字母和數(shù)字”
# \d匹配數(shù)字 0-9
# a-z 匹配所有小寫(xiě)字符;A-Z 匹配所有大寫(xiě)字符
pat = re.compile(r'[\da-zA-Z]{6,20}')

選用最保險(xiǎn)的 fullmatch 方法,查看是否整個(gè)字符串都匹配。

以下測(cè)試?yán)佣挤祷?None,原因都在解釋里。

pat.fullmatch('qaz12') # 返回 None,長(zhǎng)度小于 6
pat.fullmatch('qaz12wsxedcrfvtgb67890942234343434') # None 長(zhǎng)度大于 22
pat.fullmatch('qaz_231') # None 含有下劃線

下面這個(gè)字符串 n0passw0Rd 完全符合:

In [20]: pat.fullmatch('n0passw0Rd')
Out[20]: 

自定義類型

Python 使用關(guān)鍵字 class 定制自己的類,self 表示類實(shí)例對(duì)象本身。

一個(gè)自定義類內(nèi)包括屬性、方法,其中有些方法是自帶的。

類(對(duì)象):

class Dog(object):
   pass

以上定義一個(gè) Dog 對(duì)象,它繼承于根類 object,pass 表示沒(méi)有自定義任何屬性和方法。

下面創(chuàng)建一個(gè) Dog 類型的實(shí)例:

wangwang = Dog()

Dog 類現(xiàn)在沒(méi)有定義任何方法,但是剛才說(shuō)了,它會(huì)有自帶的方法,使用 dir() 查看這些自帶方法:

In [26]: wangwang.__dir__()
Out[26]:
['__module__',
'__dict__',
'__weakref__',
'__doc__',
'__repr__',
'__hash__',
'__str__',
'__getattribute__',
'__setattr__',
'__delattr__',
'__lt__',
'__le__',
'__eq__',
'__ne__',
'__gt__',
'__ge__',
'__init__',
'__new__',
'__reduce_ex__',
'__reduce__',
'__subclasshook__',
'__init_subclass__',
'__format__',
'__sizeof__',
'__dir__',
'__class__']

有些地方稱以上方法為魔法方法,它們與創(chuàng)建類時(shí)自定義個(gè)性化行為有關(guān)。比如:

  • init 方法能定義一個(gè)帶參數(shù)的類;

  • new 方法自定義實(shí)例化類的行為;

  • getattribute 方法自定義讀取屬性的行為;

  • setattr 自定義賦值與修改屬性時(shí)的行為。

類的屬性:

def __init__(self, name, dtype):
    self.name = name
    self.dtype = dtype

通過(guò) init,定義 Dog 對(duì)象的兩個(gè)屬性:name、dtype。

類的實(shí)例:

wangwang = Dog('wangwang','cute_type')

wangwangDog 類的實(shí)例。

類的方法:

def shout(self):
   print('I\'m %s, type: %s' % (self.name, self.dtype))

注意:

  • 自定義方法的第一個(gè)參數(shù)必須是 self,它指向?qū)嵗旧恚?Dog 類型的實(shí)例 dog;

  • 引用屬性時(shí),必須前面添加 self,比如 self.name 等。

總結(jié)以上代碼:

In [40]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.name=name
   ...:         self.dtype=dtype
   ...:     def shout(self):
   ...:         print('I\'m %s, type: %s' % (self.name, self.dtype))

In [41]: wangwang = Dog('wangwang','cute_type')

In [42]: wangwang.name
Out[42]: 'wangwang'

In [43]: wangwang.dtype
Out[43]: 'cute_type'

In [44]: wangwang.shout()
I'm wangwang, type: cute_type

看到創(chuàng)建的兩個(gè)屬性和一個(gè)方法都被暴露在外面,可被 wangwang 調(diào)用。這樣的話,這些屬性就會(huì)被任意修改:

In [49]: wangwang.name='wrong_name'
   
In [50]: wangwang.name
Out[50]: 'wrong_name'

如果想避免屬性 name 被修改,可以將它變?yōu)樗接凶兞?。改?dòng)方法:屬性前加 2 個(gè) _ 后,變?yōu)樗接袑傩?。如?/p>

In [51]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.__name=name
   ...:         self.__dtype=dtype
   ...:     def shout(self):
   ...:         print('I\'m %s, type: %s' % (self.name, self.dtype))

同理,方法前加 2 個(gè) _ 后,方法變?yōu)椤八接蟹椒ā?,只能?Dog 類內(nèi)被共享使用。

但是這樣改動(dòng)后,屬性 name 不能被訪問(wèn)了,也就無(wú)法得知 wangwang 的名字叫啥。不過(guò),這個(gè)問(wèn)題有一種簡(jiǎn)單的解決方法,直接新定義一個(gè)方法就行:

def get_name(self):
   return self.__name

綜合代碼:

In [52]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.__name=name
   ...:         self.__dtype=dtype
   ...:     def shout(self):
   ...:         print('I\'m %s, type: %s' % (self.name, self.dtype))
   ...:     def get_name(self):
   ...:         return self.__name
   ...:

In [53]: wangwang = Dog('wangwang','cute_type')

In [54]: wangwang.get_name()
Out[54]: 'wangwang'

但是,通過(guò)此機(jī)制,改變屬性的可讀性或可寫(xiě)性,怎么看都不太優(yōu)雅!因?yàn)闊o(wú)形中增加一些冗余的方法,如 get_name。

下面,通過(guò)另一個(gè)例子,解釋如何更優(yōu)雅地改變某個(gè)屬性為只讀或只寫(xiě)。

自定義一個(gè)最精簡(jiǎn)的 Book 類,它繼承于系統(tǒng)的根類 object:

class Book(object):
   def __init__(self,name,sale):
       self.__name = name
       self.__sale = sale

使用 Python 自帶的 property 類,就會(huì)優(yōu)雅地將 name 變?yōu)橹蛔x的。

   @property
   def name(self):
       return self.__name

使用 @property 裝飾后 name 變?yōu)閷傩?,意味?.name 就會(huì)返回這本書(shū)的名字,而不是通過(guò) .name() 這種函數(shù)調(diào)用的方法。這樣變?yōu)檎嬲膶傩院?,可讀性更好。

In [101]: class Book(object):
    ...:     def __init__(self,name,sale):
    ...:         self.__name = name
    ...:         self.__sale = sale
    ...:     @property
    ...:     def name(self):
    ...:         return self.__name

In [102]: a_book = Book('magic_book',100000)

In [103]: a_book.name
Out[103]: 'magic_book'

property 是 Python 自帶的類,前三個(gè)參數(shù)都是函數(shù)類型。更加詳細(xì)的討論放在后面討論裝飾器時(shí)再展開(kāi)。

In [104]: help(property)
Help on class property in module builtins:

class property(object)
|  property(fget=None, fset=None, fdel=None, doc=None)

如果使 name 既可讀又可寫(xiě),就再增加一個(gè)裝飾器 @name.setter。

In [105]: class Book(object):
    ...:     def __init__(self,name,sale):
    ...:         self.__name = name
    ...:         self.__sale = sale
    ...:     @property
    ...:     def name(self):
    ...:         return self.__name
    ...:     @name.setter
    ...:     def name(self,new_name):
    ...:         self.__name = new_name

In [106]: a_book = Book('magic_book',100000)

In [107]: a_book.name = 'magic_book_2.0'

In [108]: a_book.name
Out[108]: 'magic_book_2.0'

注意這種裝飾器寫(xiě)法:name.setter,name 已經(jīng)被包裝為 property 實(shí)例,調(diào)用實(shí)例上的 setter 函數(shù)再包裝 name 后就會(huì)可寫(xiě)。對(duì)于 Python 入門(mén)者,可以暫時(shí)不用太糾結(jié)這部分理論,使用 Python 一段時(shí)間后,再回過(guò)頭來(lái)自然就會(huì)理解。

到此,關(guān)于“Python四大數(shù)據(jù)類型實(shí)例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


分享題目:Python四大數(shù)據(jù)類型實(shí)例分析
當(dāng)前URL:http://fisionsoft.com.cn/article/pcjhjs.html