Python學(xué)習(xí)筆記一:01數(shù)值類型以及數(shù)據(jù)類型

一、Python課程簡介

??Python, 是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言统屈,由荷蘭人Guido van Rossum于1989年發(fā)明,第一個(gè)公開發(fā)行版發(fā)行于1991年牙躺。
??Python是純粹的自由軟件愁憔, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議。Python語法簡潔清晰孽拷,特色之一是強(qiáng)制用空白符(white space)作為語句縮進(jìn)吨掌。
??Python具有豐富和強(qiáng)大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起膜宋。常見的一種應(yīng)用情形是窿侈,使用Python快速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對其中有特別要求的部分秋茫,用更合適的語言改寫史简,比如3D游戲中的圖形渲染模塊,性能要求特別高肛著,就可以用C/C++重寫圆兵,而后封裝為Python可以調(diào)用的擴(kuò)展類庫。需要注意的是在您使用擴(kuò)展類庫時(shí)可能需要考慮平臺問題枢贿,某些可能不提供跨平臺的實(shí)現(xiàn)殉农。
設(shè)計(jì)者開發(fā)時(shí)總的指導(dǎo)思想是,對于一個(gè)特定的問題局荚,只要有一種最好的方法來解決就好了超凳。
??Python的作者有意的設(shè)計(jì)限制性很強(qiáng)的語法,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進(jìn))都不能通過編譯危队。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則聪建。

  • Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性茫陆、互動(dòng)性和面向?qū)ο蟮哪_本語言金麸。
  • Python 的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語言經(jīng)常使用英文關(guān)鍵字簿盅,其他語言的一些標(biāo)點(diǎn)符號挥下,它具有比其他語言更有特色語法結(jié)構(gòu)。
  • Python 是一種解釋型語言(邊解釋邊執(zhí)行): 這意味著開發(fā)過程中沒有了編譯這個(gè)環(huán)節(jié)桨醋。類似于PHP和Perl語言棚瘟。
  • Python 是交互式語言: 這意味著,您可以在一個(gè)Python提示符喜最,直接互動(dòng)執(zhí)行寫你的程序偎蘸。
  • Python 是面向?qū)ο笳Z言: 這意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對象的編程技術(shù)。
  • Python 是初學(xué)者的語言:Python 對初級程序員而言瞬内,是一種偉大的語言迷雪,它支持廣泛的應(yīng)用程序開發(fā),從簡單的文字處理到 WWW 瀏覽器再到游戲虫蝶。
    ??如果對語言進(jìn)行分類章咧,那么python是一門強(qiáng)類型,動(dòng)態(tài)類型的語言(弱類型:比如int可以變成float能真,python中數(shù)值類型不可變赁严;動(dòng)態(tài)類型:編譯時(shí)不知道變量類型扰柠,python中變量無類型)。

二疼约、數(shù)值類型

??數(shù)值類型就是我們平常用來做計(jì)算的數(shù)字類型卤档,在python中有如下幾種數(shù)值類型:
??Python3 中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:

  • Number(數(shù)字)
  • String(字符串)
  • List(列表)
  • Tuple(元組)
  • Sets(集合)
  • Dictionary(字典)

1. Number(數(shù)字)

??Python3 支持 int(整型)、float(浮點(diǎn)型)忆谓、bool(布爾型)裆装、complex(復(fù)數(shù))。
??在Python 3里倡缠,只有一種整數(shù)類型 int,表示為長整型茎活,沒有 python2 中的 Long昙沦。像大多數(shù)語言一樣,數(shù)值類型的賦值和計(jì)算都是很直觀的载荔。
??內(nèi)置的 type() 函數(shù)可以用來查詢變量所指的對象類型盾饮。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

??此外還可以用 isinstance 來判斷:

>>>a = 111
>>> isinstance(a, int)      # returns True

??isinstance 和 type 的區(qū)別在于:

class A:
    pass

class B(A):
    pass

isinstance(A(), A)  # returns True
type(A()) == A      # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

區(qū)別就是:
??type()不會認(rèn)為子類是一種父類類型。
??isinstance()會認(rèn)為子類是一種父類類型懒熙。

(1) int整型

>>> type(1)  #b查看類型  int整型 結(jié)果為 <class 'int'>
>>> a=1
>>> type(a)

(2) float浮點(diǎn)型

??浮點(diǎn)型由整數(shù)部分和小數(shù)部分組成丘损,也可以使用科學(xué)計(jì)數(shù)法表示

>>> type(1.1)  #查看類型  int整型 結(jié)果為 <class 'float'>
>>> a=1.1
>>> type(a)
>>> a-1  #0.10000000000009
>>> import decimal  #十進(jìn)制的浮點(diǎn)型
>>> d=decimal.Decimal('1.1')
>>> a=1
>>> d-a  #0.1

(3) 布爾型

>>> c=True   #bool 值為1 橙色為關(guān)鍵字 得大寫
>>> type(c)
>>> c2=False    #值為0 可以數(shù)字相加
>>> type(c2)

(4) 復(fù)數(shù)型

??可以用a + bj,或者complex(a,b)表示, 復(fù)數(shù)的實(shí)部a和虛部b都是浮點(diǎn)型

>>> e=1+2j   #只能用j或者J表示虛部
>>> type(e)   #complex型

??Python沒有專門表示虛數(shù)的類型工扎,而將虛數(shù)視為實(shí)部為零的復(fù)數(shù)徘钥。

2. 補(bǔ)充:

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

??Python 中的變量不需要聲明。每個(gè)變量在使用前都必須賦值肢娘,變量賦值以后該變量才會被創(chuàng)建呈础,因?yàn)閜ython變量沒有默認(rèn)值。
??在 Python 中橱健,變量就是變量而钞,它沒有類型,我們所說的"類型"是變量所指的內(nèi)存中對象的類型拘荡。
??等號(=)用來給變量賦值臼节。
??等號(=)運(yùn)算符左邊是一個(gè)變量名,等號(=)運(yùn)算符右邊是存儲在變量中的值。

(2) 多個(gè)變量賦值

??Python允許你同時(shí)為多個(gè)變量賦值珊皿。例如:

>>> a = b = c = 1  #創(chuàng)建一個(gè)整型對象网缝,值為1,三個(gè)變量被分配到相同的內(nèi)存空間上亮隙。

??您也可以為多個(gè)對象指定多個(gè)變量途凫。例如:

>>> a, b, c = 1, 2, "runoob"  #兩個(gè)整型對象 1 和 2 的分配給變量 a 和 b,字符串對象 "runoob" 分配給變量 c溢吻。
>>> a=1;b=2  #兩個(gè)整型對象1和2的分配給a和b

(3) 查看屬性方法

>>> dir(__builtins__) #查看屬性方法

(4) 查看所有關(guān)鍵字

①>>> import keyword   #導(dǎo)入關(guān)鍵字模塊
  >>> keyword.kwlist   #調(diào)用屬性
②>>> help('keywords')     #基礎(chǔ)階段重要的內(nèi)置函數(shù) 查看關(guān)鍵字

(5) 保存及運(yùn)行文件

①IDLE中file→new file
  file→save(ctrl+s) 在彈窗中選擇路徑和填寫文件名
②Run→Run Moudle(F5) 即可在IDLE中運(yùn)行

(6) 默認(rèn)顏色說明

??紫色為內(nèi)置函數(shù)维费,例如

dir,print,type,int,list,tuple,print

??橙色為關(guān)鍵字果元,例如

True

(7) 使用del語句刪除一些對象引用

??可以通過使用del語句刪除單個(gè)或多個(gè)對象。例如:

>>> del var
>>> del var_a,var_b

3. 數(shù)值運(yùn)算

(1) 運(yùn)算符

python支持以下七種運(yùn)算符:

  1. 算術(shù)運(yùn)算符
  2. 比較(關(guān)系)運(yùn)算符
  3. 賦值運(yùn)算符
  4. 邏輯運(yùn)算符
  5. 位運(yùn)算符
  6. 成員運(yùn)算符
  7. 身份運(yùn)算符

① 算術(shù)運(yùn)算符

??+   -   *   /(數(shù)值的除法的結(jié)果是浮點(diǎn)數(shù))  //(整除犀盟,向下取整而晒,地板除法)  %(取余)  x**y(返回x的y次冪)

>>> q=5;w=2
>>> q//w #2 向下取整
>>> q/w #2.5
>>> a,b=9.0,2.0
>>> a//b=4.0
>>> import math  #導(dǎo)入數(shù)學(xué)模塊
>>> math.ceil(5/2) #3 向上取整
>>> dir(math)  #查看math的方法
>>> 5%2 #取余運(yùn)算 為1
>>> 2**4 #冪運(yùn)算 2的4次方為16

② 比較運(yùn)算符

??假設(shè)變量a為10阅畴,b為20

==  等于  (a==b)返回False
倡怎!=  不等于 (a!=b)返回Ture
>   大于  (a>b)返回False
<   小于  (a<b)返回Ture
>=  大于等于    (a>=b)返回False
<=  小于等于    (a<=b)返回Ture

??注意:python中支持連續(xù)比較钠乏,本質(zhì):通過編譯器將連續(xù)比較拆分成多個(gè)比較

③ 賦值運(yùn)算符

=  +=  -=  =  /=  %=  *=  //=

>>> a+=1  #等價(jià)于a=a+1

??在混合計(jì)算時(shí)俏拱,Python會把整型轉(zhuǎn)換成為浮點(diǎn)數(shù)。

④ 位運(yùn)算符

??位運(yùn)算符是把數(shù)字看作二進(jìn)制進(jìn)行計(jì)算的吼句。
??假設(shè)a為60锅必,b為13
??a:0011 1100  b:0000 1101

  • & 按位與運(yùn)算符:若參與運(yùn)算的兩個(gè)值的兩個(gè)相應(yīng)位都為1,則該位的結(jié)果為1命辖,否則為0 (a&b)輸出結(jié)果12况毅,二進(jìn)制解釋:0000 1100
  • | 按位或運(yùn)算符:只要對應(yīng)的兩個(gè)二進(jìn)制位有一個(gè)為1,結(jié)果位就為1 (a|b)輸出結(jié)果60尔艇,二進(jìn)制解釋:0011 1101
  • ^ 按位異或運(yùn)算符:當(dāng)兩個(gè)對應(yīng)的二進(jìn)制位相異時(shí)尔许,結(jié)果為1 (a^b)輸出結(jié)果49,二進(jìn)制解釋:0011 0001
  • ~ 按位取反運(yùn)算符:對數(shù)據(jù)的每個(gè)二進(jìn)制位取反终娃,即把1變?yōu)?味廊,把0變?yōu)? (a~b)輸出結(jié)果-61,二進(jìn)制解釋:1100 0011
  • << 左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部左移若干位棠耕,由<<<右邊的數(shù)指定移動(dòng)的位數(shù)余佛,高位丟棄,低位補(bǔ)0 (a<<2)輸出結(jié)果240窍荧,二進(jìn)制解釋:1111 0000
  • > > 右移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部右移若干位辉巡,由<<<右邊的數(shù)指定移動(dòng)的位數(shù) (a>>2)輸出結(jié)果15,二進(jìn)制解釋:0000 1111

⑤ 邏輯運(yùn)算符

??假設(shè)a為10蕊退,b為20

  • and 布爾"與":如果x為False郊楣,x and y就返回False憔恳,否則返回y的計(jì)算值
(a and b)    返回20
  • or 布爾"或":如果是非0,就返回x的值净蚤,否則返回y的計(jì)算值
(a or b)返回10
  • not 布爾"非":如果x為True钥组,就返回False,如果x為False今瀑,就返回True
not(a and b)    返回False

⑥ 成員運(yùn)算符

??假設(shè)a為10程梦,list=[1,2,3,4,5]

  • in 如果在指定的序列中找到值,就返回True橘荠,否則返回False
print(a in list)    返回False
  • not in 如果在指定的序列中沒有找到值屿附,就返回True,否則就返回False
print(a not in list)    返回True

⑦ 身份運(yùn)算符

??假設(shè)a為10哥童,b為10

  • is is判斷兩個(gè)標(biāo)識符是否引用自同一個(gè)對象 print(a is b)返回True
  • not is is not 用來判斷兩個(gè)標(biāo)識符是否引用自不同對象
print(a not is b)    返回False

(2) 運(yùn)算符優(yōu)先級

??表中列出了從最高到最低優(yōu)先級的所有運(yùn)算符

運(yùn)算符 描述
** 指數(shù)(最高級)
~拿撩、+、- 按位翻轉(zhuǎn)如蚜、一元加號和減號
*、/影暴、%错邦、// 乘、除型宙、取模撬呢、取整除
+、- 加法妆兑、減法
>>魂拦、<< 右移、左移運(yùn)算符
& 位與
^搁嗓、 位運(yùn)算符
<=芯勘、<、>腺逛、>= 比較運(yùn)算符
<>荷愕、==、!= 等于運(yùn)算符
=棍矛、&=安疗、/=、//=够委、-=荐类、+=、=茁帽、*= 賦值運(yùn)算符
Is玉罐、is not 身份運(yùn)算符
In屈嗤、not in 成員運(yùn)算符
not、or厌小、and 邏輯運(yùn)算符

??計(jì)算順序:默認(rèn)地恢共,運(yùn)算符優(yōu)先級表決定了哪個(gè)運(yùn)算符在別的運(yùn)算符之前計(jì)算。然而璧亚,如果你想要改變它們的計(jì)算順序讨韭,你得使用圓括號。
注意:

  1. 括號擁有最高優(yōu)先級癣蟋,可以強(qiáng)制表達(dá)式按照需要的順序求值
  2. 乘方擁有次高的優(yōu)先級
  3. 優(yōu)先級相同的操作按照自左向右的順序求值(乘方除外)

4. 序列類型

??數(shù)據(jù)結(jié)構(gòu)是以某種方式(如通過編號)組合起來的數(shù)據(jù)元素(如數(shù)透硝、字符乃至其他數(shù)據(jù)結(jié)構(gòu))集合。在Python中疯搅,最基本的數(shù)據(jù)結(jié)構(gòu)為序列濒生。
??Python包含6種內(nèi)建序列,即列表、元組幔欧、字符串罪治、Unicode字符串、buffer字符串礁蔗、xrange對象

  • 字符串  str
  • 列表  list
  • 元組  tuple
    <b>其中:</b>
  • 可變序列  list
  • 不可變序列  tuple,str
    ??Python支持一種數(shù)據(jù)結(jié)構(gòu)的概念觉义,名為容器。容器基本上就是可包含其他對象的對象浴井。兩種主要的容器是序列(如列表和元組)和映射(如字典)晒骇。在序列中,每個(gè)元素都有編號磺浙,而在映射中洪囤,每個(gè)元素都有名稱(也叫鍵)。有一種既不是序列也不是映射的容器撕氧,它就是集合瘤缩。

(1) 字符串--string

① 單引號字符串

??Python中的字符串用單引號(')或雙引號(")括起來,同時(shí)使用反斜杠()轉(zhuǎn)義特殊字符呵曹。

>>> s1='asljf123'     #'asljf123'
>>> s2='asljf' '123'  #'asljf123'

② 對引號轉(zhuǎn)義

>>> s3="Hello,World!"   #'Hello,World'

??在這個(gè)示例中款咖,我們使用雙引號將其括起和單引號有差別么崇猫?

>>>s4='Hello,World!'    #'Hello,World'

??其實(shí)狱从,結(jié)果完全相同。為何同時(shí)支持單引號和雙引號呢佳励?

>>> s5="asd:'adffw'"    #"asd:'adffw'"  引用某人說的話
>>> '"Hello!"she said'  #'"Hello!"she said'

??第一個(gè)字符串包含一個(gè)單引號跨新,因此不能用單引號將整個(gè)字符串括起富腊,否則解釋器將報(bào)錯(cuò)。
??第二個(gè)字符串包含雙引號域帐,因此必須使用單引號將整個(gè)字符串括起赘被。
也可以使用反斜杠()對引號進(jìn)行轉(zhuǎn)義是整。

>>> 'Let\'s go!'    #"Let's go!"

??這樣Python將明白中間的引號是字符串的一部分,而不是字符串結(jié)束的標(biāo)志民假。

>>> s6='''aaa       #可以跨行
>>> ggg'''    #'aaa\ngggg'

③ 拼接字符串

>>> s2='asljf' '123'  #'asljf123'

??Python自動(dòng)將它們拼接起來了浮入。僅當(dāng)你同時(shí)一次輸入兩個(gè)字符串時(shí),這種機(jī)制才管用羊异。
加號 (+) 是字符串的連接符事秀, 星號 (*) 表示復(fù)制當(dāng)前字符串,緊跟的數(shù)字為復(fù)制的次數(shù)野舶。

>>> str = 'Runoob'
>>> print (str * 2) # 輸出字符串兩次  RunoobRunoob
>>> print (str + "TEST") # 連接字符串  RunoobTEST

④ 字符串標(biāo)識str和repr

??Python打印所有的字符串時(shí)易迹,都用引號將其括起。這是因?yàn)镻ython打印值時(shí)平道,保留其在代碼中的樣子睹欲,而不是你希望用戶看到的樣子。但如果用print一屋,結(jié)果將不同窘疮。

>>> "Hello,\nworld!"    #'Hello,\nworld!'
>>> print("Hello,\nworld!") 
#'Hello,
world!'

??通過兩種不同的機(jī)制將值轉(zhuǎn)換成了字符串。你可通過使用函數(shù)str和repr直接使用這兩種機(jī)制冀墨。使用str能以合理的方式將值轉(zhuǎn)換為用戶能夠看懂的字符串考余。

>>> print(repr("Hello,\nworld!"))       #'Hello,\nworld!'
>>> print(str("Hello,\nworld!"))    
#'Hello,
world!'

⑤ 長字符串

??要表示很長的字符串(跨越多行的字符串),可使用三引號轧苫。

>>> print('''This is a very long string.
It continues here.''')

??還可以使用三個(gè)雙引號。請注意疫蔓,這讓解釋器能夠識別表示字符串開始和結(jié)束位置的引號含懊,因此字符串本身可包含單引號和雙引號,無需使用反斜杠進(jìn)行轉(zhuǎn)義衅胀。
??注意:常規(guī)字符串也可跨越多行岔乔。只要在行尾加上反斜杠,反斜杠和換行符將被轉(zhuǎn)義滚躯。

>>> 1+2+\
+4+5

⑥ 原始字符串

??Python 使用反斜杠()轉(zhuǎn)義特殊字符雏门,如果你不想讓反斜杠發(fā)生轉(zhuǎn)義,可以在字符串前面添加一個(gè) r或者添加一個(gè)\掸掏,表示原始字符串茁影。

>>> print('Ru\noob')  #Ru   此處有換行     oob
>>> print('Ru\\noob')  #Ru\noob
>>> print(r'Ru\noob')  #Ru\noob

??一個(gè)例外是,引號需要像通常那樣進(jìn)行轉(zhuǎn)義丧凤,但這意味著用于執(zhí)行轉(zhuǎn)義的反斜杠也將包含在最終的字符串中募闲。

>>> print(r(Let\'s go!'))       #Let\'s go

??另外,原始字符串不能以單個(gè)反斜杠結(jié)尾愿待。

>>> print(r'C:\Program Files\foo\bar''\\')

??注意:Python 沒有單獨(dú)的字符類型即沒有char浩螺,一個(gè)字符就是長度為1的字符串靴患。
與 C 字符串不同的是,Python 字符串不能被改變要出。向一個(gè)索引位置賦值鸳君,比如word[0]='m'會導(dǎo)致錯(cuò)誤。

(2) 列表--list

??列表的內(nèi)容是可變的患蹂,即可修改其內(nèi)容或颊。

① 創(chuàng)建

??List(列表) 是 Python 中使用最頻繁的數(shù)據(jù)類型。列表可以完成大多數(shù)集合類的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)况脆。列表中元素的類型可以不相同饭宾,它支持?jǐn)?shù)字,字符串甚至可以包含列表(所謂嵌套)格了。列表是寫在方括號([])之間看铆、用逗號分隔開的元素列表。列表中的元素類型也可以不相同盛末。

>>> list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
>>> li=['a','b']  #list 寫在方括號之間弹惦,元素用逗號隔開

② 操作

??與Python字符串,元組不一樣的是悄但,列表中的元素是可以改變的:

a. 修改列表:給元素賦值

??使用索引表示法給特定位置的元素賦值棠隐。

>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9    #變?yōu)榱薬=[9,2,3,4,5,6]
>>> a[2:5] = []   # 將對應(yīng)的元素值設(shè)置為 []  變?yōu)榱薣9, 2, 6]  

??可以對一個(gè)列表中的元素賦不同類型的值。列表a中既有int類型的值檐嚣,也有str 類型的值助泽。

>>> a[1] = 'hello'  #[1, 'hello', 3, 4, 5, 6]

??不能對一個(gè)不存在元素的位置賦值,因此如果列表的長度為2嚎京,就不能給索引為100 的元素賦值嗡贺。

>>> a[7]=2      #IndexError: list assignment index out of range

??如果要賦值,可以用乘法來先進(jìn)行初始化操作鞍帝。

>>> b = [None]*5
>>> b = a + b   # [1, 2, 3, 4, 5, 6, None, None, None, None, None]
>>> b[7] = 2    # [1, 2, 3, 4, 5, 6, None, 2, None, None, None]
b. 增加元素

??append()方法是一個(gè)用于在列表末尾添加新對象的方法诫睬。該方法的語法如下:

list.append(obj)

??append()方法不是簡單地返回一個(gè)修改過的新列表,而是直接修改原來的列表帕涌。

>>> a.append('ww')  #a = [1, 2, 3, 4, 5, 6,'ww']

??由示例可以得知:可以往數(shù)字序列中添加字符串摄凡,也可以往字符串序列中添加數(shù)字。

c. 刪除元素

可以使用del刪除元素

>>> del a[1]    #a = [1, 3, 4, 5, 6,'ww']
>>> len(a)  #6
d. 給切片賦值

??切片賦值是列表一個(gè)強(qiáng)大的特性蚓曼。

>>> show=list('hi,boy')
>>> show[3:]=list('man')  #['h', 'i', ',', 'm', 'a', 'n']

??這里運(yùn)用了list()強(qiáng)制類型轉(zhuǎn)換,將字符串轉(zhuǎn)換為列表亲澡。List()函數(shù)的一個(gè)功能就 是根據(jù)字符串創(chuàng)建列表,并且所有類型都適用纫版。這里可以同時(shí)給多個(gè)元素賦值谷扣。

>>> greeting=list('hi')
>>> greeting=list[1:]=list('hello')  #['h','e','l','l','o']

??可將切片替換為長度與其不同的序列。

>>> field=list('ae')
>>> field[1:1]=list('bcd')  #['a', 'b', 'c', 'd', 'e']

??可以在不替換任何原有元素的情況下在任意位置插入新元素。在這里会涎,替換了一個(gè) 空切片裹匙,相當(dāng)于插入了一個(gè)序列。你可以采取相反的措施來刪除切片末秃。

>>> field1=list('abcde')
>>> field1[1:4]=[]    #['a','e']

??使用了前面插入操作的逆操作概页,可以對序列中任意位置的元素進(jìn)行刪除。上述代碼 與del field1[1:4]等效练慕。

f. 嵌套列表
>>> field2=['a','b','c']
>>> num=[1,2,3]
>>> mix=[field2,num]    #[['a','b','c'], [1,2,3]]
>>> mix[0]  #['a','b','c']
>>> mix[0][0]  #'a'

??在列表中可以嵌套列表惰匙,嵌套的列表取出后還是列表。

(3) 元組--tuple

??與列表一樣铃将,元組也是序列项鬼,不同之處在于元組的元素不能修改。元組寫在小括號(())里劲阎,元素之間用逗號隔開绘盟。元組中的元素類型也可以不相同。
??因?yàn)樵M不可變悯仙,所以代碼更安全龄毡,如果可能,能用元組代替列表就盡量用元組

① 創(chuàng)建

??元組語法很簡單锡垄,只要將一些值用逗號分隔沦零,就能自動(dòng)創(chuàng)建一個(gè)元組。

>>> tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 )
>>> tu=1,2,3    #也是元組
>>> tu=(1,2,3)   #tuple

??元組還可用圓括號括起(這也是通常采用的做法)

>>> tup1 = ()    

??空元組用兩個(gè)不包含任何內(nèi)容的圓括號表示

>>> (1)   #變?yōu)檎土?1
>>> 42货岭,     #(42,)   

??包含一個(gè)值的元組的實(shí)現(xiàn)方式有一些奇特路操,必須在括號中的元素后面加一個(gè)逗號。

>>> tuple([1,2,3])  #(1,2,3)
>>> tuple('abc')    #('a','b','c')
>>> tuple((1,2,3))  #(1,2,3)

??函數(shù)tuple的工作原理與list很像:它將一個(gè)序列作為參數(shù)千贯,并將其轉(zhuǎn)換為元組寻拂。如果參數(shù)已經(jīng)是元組,就原封不動(dòng)地返回它丈牢。

② 操作

a. 訪問元組

??使用下標(biāo)索引訪問

>>> mix = ('hello',1220)
>>> mix[0]  #('hello')
>>> mix[0:2]    #('hello',1220)
b. 修改元組

??元組中的元素值不允許修改,但可以對元組進(jìn)行連接組合

>>> field = (112,333)
>>> tu = ('hello')
>>> field + tu  #(112,333, 'hello')
c. 刪除元組

??元組中的元素值不允許刪除瞄沙,但可以使用del語句刪除整個(gè)元組

>>> del field
>>> print(field)    #NameError: name 'field' is not defined
d. 元組截取

??用索引截取一段元素

>>> num = (1,2,3,4)
>>> num[1:] #(2,3,4)

③ 為何要熟悉元組呢己沛?

  1. 它們用作映射中的鍵(以及集合的成員),而列表不行距境。
  2. 有些內(nèi)置函數(shù)數(shù)和方法返回元組申尼,這意味著必須跟它們打交道。只要不嘗試修改元組垫桂,與元組打交道通常意味著像處理列表一樣處理它們(需要使用元組沒有的index和count等方法時(shí)例外)师幕。

④ 指向不變

>>> t = ('a','b',['A','B'])
>>> t[2][0]='X'
>>> t[2][1]='Y'
>>> t   #('a','b',['X','Y'])

??表面上看,元組的元素確實(shí)變了,其實(shí)變的不是元組的元素霹粥,而是list列表的元素灭将。元組一開始指向的list列表并沒有改成別的list列表,所以元組的不變是指每個(gè)元素的指向永遠(yuǎn)不變后控,如指向'a'就不能改成指向'b'指向一個(gè)list就不能改成指向其它對象庙曙,但指向的list列表本身是可變的。

5. 序列的通用操作

??Python中所有序列都可以進(jìn)行一些特定操作浩淘,包括索引捌朴、切片、相加张抄、相乘和成員資格檢查砂蔽。另外,Python還提供了一些內(nèi)置函數(shù)署惯,可用于確定序列的長度以及找出序列中的長度左驾、最小值和最大值。
??索引和步長都有正負(fù)之分

(1) 索引

??序列中的每個(gè)元素都分配一個(gè)數(shù)字(即編號)泽台,代表它在序列中的位置(索引)什荣,第一個(gè)索引為0,第二個(gè)是1怀酷,以此類推稻爬,-1為末尾的開始位置。
??序列中可以通過編號分別對序列的元素進(jìn)行訪問蜕依。
??獲取元素的方式為:在變量后加中括號[]桅锄,在中括號中輸入所取元素的索引(編號值)。

>>> greeting='Hello'
>>> greeting[0]   #H
>>> greeting[1]   #e
>>> greeting[-1]  #o

??字符串是由字符組成的序列样眠,索引0指向第一個(gè)元素友瘤。Python沒有專門用于表示字符的類型,因此一個(gè)字符就是只包含一個(gè)元素的字符串檐束。
??在Python中辫秧,從左向右索引稱為正數(shù)索引,從右向左索引稱為負(fù)數(shù)索引被丧。
??對于字符串字面量(以及其他的序列字面量)盟戏,可直接對其執(zhí)行索引操作,無需先將其賦給變量甥桂。

>>> 'Hello'[0]      #H

??如果函數(shù)調(diào)用返回一個(gè)序列柿究,可直接對其執(zhí)行索引操作。

>>> thirdt=input()[0]   

??索引既可以對變量的引用操作黄选,也可以直接操作序列蝇摸,還可以操作函數(shù)的返回序列。
??當(dāng)索引超出范圍時(shí),Python會報(bào)一個(gè)IndexError錯(cuò)誤貌夕,即索引越界錯(cuò)誤律歼。要確保索引不越界,記得最后一個(gè)元素的索引是len(str)-1蜂嗽。

(2) 切片

??索引用來對單個(gè)元素進(jìn)行訪問苗膝,使用切片可以對一定范圍內(nèi)的元素進(jìn)行訪問,切片通過冒號相隔的兩個(gè)索引實(shí)現(xiàn)植旧。
??序列的截取(序列被截取后返回一個(gè)包含所需元素的新序列辱揭。)的語法格式如下:
變量[頭下標(biāo):尾下標(biāo)]
??第一個(gè)索引是包含的第一個(gè)元素的編號,但第二個(gè)索引是切片后余下的第一個(gè)元素的編號病附。

>>> li=['a','b','c','d','e']
>>> len(li)   #計(jì)算長度
>>> li[3]     #為'd'
>>> li[0:3]   #為['a', 'b', 'c'] 切片 左閉右開的  

??分片操作既支持正數(shù)索引问窃,也支持負(fù)數(shù)索引⊥昊Γ  
??分片操作的實(shí)現(xiàn)需要提供兩個(gè)索引作為邊界域庇,第一個(gè)索引的元素包含在分片內(nèi),第二個(gè)索引的元素不包含在分片內(nèi)覆积,即左閉右開听皿。

① 絕妙的簡寫

??假設(shè)要訪問列表中的最后兩個(gè)元素:

>>> number[3:5]     #['d','e']
>>> number[-100:-1]  #[1, 2, 3, 4, 5, 6, 7, 8, 9]

??在這里,索引為5指的是第6個(gè)元素:它并不存在宽档,但確實(shí)是到達(dá)最后一個(gè)元素后再前進(jìn)一步所處的位置尉姨。
??分片操作不存在索引越界的問題,分片操作對不存在的編號返回空值吗冤,存在的就返回對應(yīng)值又厉。

>>> li[-3:0]   #[]

??執(zhí)行切片操作時(shí),如果第一個(gè)索引指定的元素位于第二個(gè)索引指定的元素后面(在這里椎瘟,倒數(shù)第3個(gè)元素位于第1個(gè)元素后面)覆致,結(jié)果就是一個(gè)空序列。

>>> li[2:]    #['c', 'd', 'e'] 輸出從第三個(gè)元素開始的所有元素

??如果切片結(jié)束于序列末尾肺蔚,可省略第二個(gè)索引煌妈。

>>> li[:2]     #['a','b']

??同樣,如果切片始于序列開頭宣羊,可省略第一個(gè)索引璧诵。

>>> li[:]

??要復(fù)制整個(gè)序列,可將兩個(gè)索引都省略段只。

② 步長

??進(jìn)行切片時(shí),切片的開始和結(jié)束點(diǎn)都需要指定(無論是直接還是間接)鉴扫,用這種方式取連續(xù)的元素沒有問題赞枕,但若要取序列中不連續(xù)的元素就比較麻煩,或者直接不能操作。
??所以炕婶,Python提供了另一個(gè)參數(shù)--步長姐赡,該參數(shù)通常是隱式設(shè)置的。在普通切片中柠掂,步長是1项滑,步長不能為0。切片操作就是按照這個(gè)步長逐個(gè)遍歷序列的元素涯贞,因此切片包含起點(diǎn)和終點(diǎn)之間的所有元素枪狂。

>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> number[0:10:2]  #[1,3,5,7,9]  設(shè)置步長為2時(shí),得到奇數(shù)序列宋渔,其中這個(gè)2就是步長的顯示設(shè)置
>>> li[::]   #['a', 'b', 'c', 'd', 'e'] 第二個(gè):后為步長 默認(rèn)為1
>>> li[::2]  #['a', 'c', 'e'] 兩個(gè)走一步  

??使用負(fù)數(shù)步長州疾,即從右向左提取元素。

>>> li[5:0:-1]  #['e', 'd', 'c', 'b']
>>> li[0:5:-1]  #[]  拿不到東西
>>> li[-1:-6:-1]  #['e', 'd', 'c', 'b', 'a']
>>> li[-3:-5:-1]  #['c', 'b']

??對于正數(shù)步長皇拣,Python會從序列的頭部開始向右提取元素严蓖,直到最后一個(gè)元素;
??對于負(fù)數(shù)步長氧急,則是從序列的尾部開始向左提取元素颗胡,直到第一個(gè)元素。
??正數(shù)步長必須讓開始點(diǎn)小于結(jié)束點(diǎn)吩坝,而負(fù)數(shù)步長必須讓開始點(diǎn)大于結(jié)束點(diǎn)毒姨。

>>> li[5:0:-1]  #['e', 'd', 'c', 'b']  #設(shè)置第二個(gè)索引為0,取不到序列中的第一個(gè)元素
>>> li[5::-1]  #['e', 'd', 'c', 'b', 'a']  

??使用負(fù)數(shù)步長時(shí)钾恢,設(shè)置第二個(gè)索引為空才可以取到序列的第一個(gè)元素手素。

(3) 序列相加

??使用加號可以進(jìn)行序列的連接操作。

>>> [1,2,4]+[4,5,6]  #[1,2,4,4,5,6]
>>> 'sssdd'+'qqqeee'  #'sssddqqqeee'
>>> [1]+ 'a'    #TypeError: can only concatenate list (not "str") to list

??只有類型相同的序列才能通過加號進(jìn)行序列連接操作瘩蚪,不同類型的序列不能通過加號進(jìn)行序列連接操作泉懦。

(4) 乘法

?將序列與數(shù)x相乘時(shí),將重復(fù)這個(gè)序列x次來創(chuàng)建一個(gè)新序列疹瘦。

>>> 'h'*5  #'hhhhh'
>>> [1]*3  #[1,1,1]

??如果要?jiǎng)?chuàng)建一個(gè)重復(fù)序列崩哩,就可以像上面的示例一樣乘以一個(gè)想要得到的序列長度的數(shù)字,這樣就可以快速得到需要的列表言沐,非常方便邓嘹。
??空列表是使用不包含任何內(nèi)容的兩個(gè)方括號([])表示的,表示里面什么東西都沒有险胰。如果創(chuàng)建一個(gè)占用10個(gè)或更多元素的空間汹押,卻不包括任何有用內(nèi)容的列表,該怎么辦呢起便?做法是使用[0]*10棚贾,浙江創(chuàng)建一個(gè)包含10個(gè)0的列表窖维。
??如果要初始化一個(gè)長度為x的序列,就需要讓每個(gè)編碼位置上都是空值妙痹,此時(shí)需要一個(gè)值代表空值铸史,即里面沒有任何元素,可以使用None怯伊。None是Python的內(nèi)建值琳轿,表示什么都沒有。因此耿芹,要將列表的長度初始化成5崭篡,可以這樣做。

>>> sq=[None]*5  #[None, None, None, None, None]

??Python中的序列懲罰可以幫助我們快速做一些初始化操作猩系。

(5) 成員資格

??要檢查特定的值是否包含在序列中媚送,可使用運(yùn)算符in和not in。
??in運(yùn)算符用于檢驗(yàn)?zāi)硞€(gè)條件是否為真寇甸,并返回檢驗(yàn)結(jié)果塘偎,滿足時(shí)返回True,不滿足時(shí)返回False拿霉。這種運(yùn)算符稱作布爾運(yùn)算符吟秩,返回的值叫布爾值。

>>> li='lucky' 
>>> 'lucky' in li    #Ture 
>>> 'lucky' not in   #False
>>> number=[1,2,3,4,5]
>>> 'a' in number  #False
>>> 3 in li         #TypeError: 'in <string>' requires string as left operand, not int

??數(shù)字類型不能在字符串類型中通過in進(jìn)行成員資格檢測绽淘,而字符串類型可以在數(shù)字列表中通過in進(jìn)行成員資格檢測涵防。

>>> subject = '$$$ Get rich now!!! $$$'
>>> '$$$' in subject    #True

??檢查字符串變量subject是否包含字符串'$$$',這可用于垃圾郵件過濾器中。

(6) 長度沪铭、最小值和最大值

??對應(yīng)的內(nèi)建函數(shù)分別是len壮池、max和min,其中函數(shù)len返回序列包含的元素個(gè)數(shù)杀怠,而min和max分別返回序列中最小和最大的元素椰憋。

>>> len(number)  #5
>>> max(1,1,2,3,4)  #4

??max和min函數(shù)的參數(shù)可以是多個(gè)數(shù)字直接作為參數(shù)。

(7) 數(shù)據(jù)類型的轉(zhuǎn)換

??有時(shí)候赔退,我們需要對數(shù)據(jù)內(nèi)置的類型進(jìn)行轉(zhuǎn)換橙依,數(shù)據(jù)類型的轉(zhuǎn)換,你只需要將數(shù)據(jù)類型作為函數(shù)名即可硕旗。以下幾個(gè)內(nèi)置的函數(shù)可以執(zhí)行數(shù)據(jù)類型之間的轉(zhuǎn)換窗骑。這些函數(shù)返回一個(gè)新的對象,表示轉(zhuǎn)換的值漆枚。

函數(shù) 描述
int(x [,base]) 將x轉(zhuǎn)換為一個(gè)整數(shù)
float(x) 將x轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù)
complex(real [,imag]) 創(chuàng)建一個(gè)復(fù)數(shù)
str(x) 將對象 x 轉(zhuǎn)換為字符串
repr(x) 將對象 x 轉(zhuǎn)換為表達(dá)式字符串
eval(str) 用來計(jì)算在字符串中的有效Python表達(dá)式,并返回一個(gè)對象
tuple(s) 將序列 s 轉(zhuǎn)換為一個(gè)元組
list(s) 將序列 s 轉(zhuǎn)換為一個(gè)列表
set(s) 轉(zhuǎn)換為可變集合
dict(d) 創(chuàng)建一個(gè)字典创译。d 必須是一個(gè)序列 (key,value)元組。
frozenset(s) 轉(zhuǎn)換為不可變集合
chr(x) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)字符
ord(x) 將一個(gè)字符轉(zhuǎn)換為它的整數(shù)值
hex(x) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)十六進(jìn)制字符串
oct(x) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)八進(jìn)制字符串
>>> a=int(1.1)   #a為1
>>> list('abc')   #['a', 'b', 'c']

6. 變量命名規(guī)則

??變量命名由字母墙基,數(shù)字软族,下劃線組成辛藻。不能以數(shù)字開頭。不能用關(guān)鍵字互订。

>>> import keyword
>>> keyword.kwlist
>>> ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 
  'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

7. 編碼來源

??由于計(jì)算機(jī)最早是美國人發(fā)明的,因此最早只有127個(gè)字母被編碼到計(jì)算機(jī)里痘拆,也就是大小寫英文字母仰禽、數(shù)字和一些符號,這個(gè)編碼表被稱為ASCII編碼
??要處理中文纺蛆,顯然一個(gè)字節(jié)是不夠的吐葵,至少需要兩個(gè)字節(jié),而且不能和ASCII編碼沖突桥氏,所以中國指定了GB2312編碼温峭,用來把中文編進(jìn)去
??所以各國有各國的標(biāo)準(zhǔn),Unicode把所有語言都統(tǒng)一到一套編碼里字支,這樣就不會有亂碼問題了
??下面我們來看ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個(gè)字節(jié)凤藏,而Unicode編碼通常是兩個(gè)字節(jié)
??新的問題又出現(xiàn)了,如果統(tǒng)一成Unicode編碼堕伪,亂碼問題從此消失了揖庄。但是寫的文本基本上全部是英文時(shí),用Unicode編碼比ASCII編碼多一倍存儲空間欠雌,在存儲和傳輸上十分不劃算
??所以出現(xiàn)了把Unicode編碼轉(zhuǎn)化為"可變長編碼"的UTF-8編碼蹄梢。UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成16個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié)富俄,漢字通常是3個(gè)字節(jié)禁炒,只有很生僻的字符才會被編碼成46個(gè)字節(jié)
??UTF-8編碼有一個(gè)額外的好處,就是ASCII編碼實(shí)際上可以看成是UTF-8的一部分
??現(xiàn)在我們可以總結(jié)一下現(xiàn)在計(jì)算機(jī)系統(tǒng)通用的字符編碼工作方式:在計(jì)算機(jī)內(nèi)存中霍比,統(tǒng)一使用Unicode編碼幕袱,當(dāng)需要保存到硬盤或需要傳輸時(shí),可以轉(zhuǎn)換為UTF-8編碼
??python用的就是UTF-8的

8. 注釋

??注釋必須以"#"符號開始桂塞,在代碼中凹蜂,井號后面到行尾的所有內(nèi)容都將被忽略。
??注釋可以獨(dú)占一行阁危,也可以放在語句行的末尾玛痊。
??注釋最重要的用途在于解釋代碼并不顯而易見的特性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狂打,隨后出現(xiàn)的幾起案子擂煞,更是在濱河造成了極大的恐慌,老刑警劉巖趴乡,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对省,死亡現(xiàn)場離奇詭異蝗拿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蒿涎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門哀托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劳秋,你說我怎么就攤上這事仓手。” “怎么了玻淑?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵嗽冒,是天一觀的道長。 經(jīng)常有香客問我补履,道長添坊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任箫锤,我火速辦了婚禮贬蛙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谚攒。我一直安慰自己速客,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布五鲫。 她就那樣靜靜地躺著溺职,像睡著了一般。 火紅的嫁衣襯著肌膚如雪位喂。 梳的紋絲不亂的頭發(fā)上浪耘,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音塑崖,去河邊找鬼七冲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛规婆,可吹牛的內(nèi)容都是我干的澜躺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼抒蚜,長吁一口氣:“原來是場噩夢啊……” “哼掘鄙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗡髓,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤操漠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饿这,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浊伙,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撞秋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚣鄙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吻贿。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哑子,靈堂內(nèi)的尸體忽然破棺而出廓八,到底是詐尸還是另有隱情,我是刑警寧澤赵抢,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站声功,受9級特大地震影響烦却,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜先巴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一其爵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伸蚯,春花似錦摩渺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挥萌,卻和暖如春绰姻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背引瀑。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工狂芋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憨栽。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓帜矾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屑柔。 傳聞我的和親對象是個(gè)殘疾皇子屡萤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348