python數據類型(數字\字符串\列表)

1、基本數據類型——數字

一、布爾型

  • bool型只有兩個值:True和False
  • 之因此將bool值歸類爲數字,是由於咱們也習慣用1表示True,0表示False。

(1)布爾值是False的各類狀況:

bool(0)   
bool(None)  
bool("") 
bool(())  
bool([])  
bool({}) 

(2)布爾值python2與python3的區別

  在Python2.7 中,True和False是兩個內建(built-in)變量,內建變量和普通自定義的變量如a, b, c同樣能夠被從新賦值,所以咱們能夠把這兩個變量進行任意的賦值。python

  在Python3.x 中,終於把這個兩變量變成了關鍵字,也就是說再也無法給這兩變量賦新的值了,今後True永遠指向真對象,False指向假對象,永不分離。api

二、整型

  Python中的整數屬於int類型,默認用十進制表示,此外也支持二進制,八進制,十六進制表示方式。數組

  進制轉換app

  二進制前面以‘0b’標示,八進制前面以‘0o’標示,十六進制以‘0x’標示ui

1 >>> bin(10)   # 轉換爲二進制
2 '0b1010'
3 >>> oct(10)    # 轉換爲八進制 
4 '0o12'
5 >>> hex(10)   # 轉換爲十六進制
6 '0xa'

  運算spa

>>> 5%2   # 取餘
1
>>> 16%4
0
>>> 2+3   # 加法
5
>>> 2-3     # 減法
-1
>>> 2*3    # 乘法
6
>>> 3/2    # 除法
1.5
>>> 9//2   # 取整除
4
>>> divmod(16,3)   # 返回包含商和餘數的元組(a // b, a % b)
(5, 1)
>>> 2**3   #
8

三、浮點數

  

  浮點數是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中一般是2)的整數次冪獲得,這種表示方法相似於基數爲10的科學計數法。code

  在python中,以雙精度(64)位來保存浮點數,多餘的位會被截掉。orm

(1)關於小數不精準問題

  Python默認的是17位精度,也就是小數點後16位,儘管有16位,可是這個精確度倒是越日後越不許的。對象

首先,這個問題不是隻存在在python中,其餘語言也有一樣的問題blog

其次,小數不精準是由於在轉換成二進制的過程當中會出現無限循環的狀況,在約省的時候就會出現誤差。

好比:11.2的小數部分0.2轉換爲2進制則是無限循環的00110011001100110011...

單精度在存儲的時候用23bit來存放這個尾數部分(前面9比特存儲指數和符號);一樣0.6也是無限循環的;

(2)計算須要使用更高的精度(超過16位小數)狀況

#藉助decimal模塊的「getcontext「和「Decimal「 方法
>>> a = 3.141592653513651054608317828332
>>> a
3.141592653513651
>>> from decimal import *
>>> getcontext()
Context(prec=50, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[FloatOperation], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> a = Decimal(1)/Decimal(3)#注,在分數計算中結果正確,若是直接定義超長精度小數會不許確
>>> a
Decimal('0.33333333333333333333333333333333333333333333333333')

>>> a = '3.141592653513651054608317828332'
>>> Decimal(a)
Decimal('3.141592653513651054608317828332')

  不推薦:字符串格式化方式,能夠顯示,可是計算和直接定義都不許確,後面的數字沒有意義。

>>> a = ("%.30f" % (1.0/3))  
>>> a  
'0.333333333333333314829616256247'

四、複數

  複數complex是由實數和虛數組成的要了解複數,其實關於複數還須要先了解虛數。

  虛數(就是虛假不實的數):平方爲複數的數叫作虛數。

  複數是指能寫成以下形式的數a+bi,這裏a和b是實數,i是虛數單位(即-1開根)。在複數a+bi中,a稱爲複數的實部,b稱爲複數的虛部(虛數是指平方爲負數的數),i稱爲虛數單位。

  當虛部等於零時,這個複數就是實數;當虛部不等於零時,這個複數稱爲虛數。

  注,虛數部分的字母j大小寫均可以

2、基本數據類型——字符串

一、字符串定義

  字符串是一個有序的字符的集合,用於存儲和表示基本的文本信息,' '或'' ''或''' '''中間包含的內容稱之爲字符串。

二、字符串特性

  1. 字符串是不可變類型。
  2. 按照從左到右的順序定義字符集合,下標從0開始順序訪問,有序。
  3. 字符串的單引號和雙引號都沒法取消特殊字符的含義,若是想讓引號內全部字符均取消特殊意義,在引號前面加r,如name=r'l\thf'
  4. unicode字符串與r連用必需在r前面,如name=ur'l\thf'

三、字符串操做

  字符串格式化(format)

'''
一、使用位置參數
    位置參數不受順序約束,且能夠爲{},參數索引從0開始,format裏填寫{}對應的參數值。
'''
>>> msg = "my name is {}, and age is {}"
>>> msg.format("hqs",22)
'my name is hqs, and age is 22'
>>> msg = "my name is {1}, and age is {0}"
>>> msg.format("hqs",23)
'my name is 23, and age is hqs'
# 傳入位置參數列表可用 *列表 的形式
>>> li = ['lary',18]
>>> 'my name is {} , age {}'.format(*li)
'my name is lary , age 18'
# 使用索引
>>> li = ['larry',12]
>>> 'my name is {0[0]}, age {0[1]}'.format(li)
'my name is larry, age 12'


'''
二、使用關鍵字參數
    關鍵字參數值要對得上,可用字典當關鍵字參數傳入值,字典前加**便可
'''
>>> hash = {'name':'john' , 'age': 23}
>>> msg = 'my name is {name}, and age is {age}'
>>> msg.format(**hash)
'my name is john,and age is 23'
>>> msg.format(name="hqs",age=13)
'my name is hqs,and age is 13'
>>> msg.format(age = 33, name = "zr")
'my name is zr, and age is 33'
 
'''
三、填充與格式化
    :[填充字符][對齊方式 <^>][寬度]
'''
>>> '{0:*<10}'.format(10)      # 左對齊
'10********'
>>> '{0:*<10}'.format("hqs")      # 左對齊
'hqs*******'
>>> '{0:*^10}'.format("hqs")      # 居中對齊
'***hqs****'
>>> '{0:*>10}'.format(10)      # 右對齊
'********10'

'''
四、精度與進制
'''
>>> '{0:.2f}'.format(1/3)     # 浮點數
'0.33'
>>> '{0:b}'.format(18)    # 二進制
'10010'
>>> '{0:o}'.format(18)    # 八進制
'22'
>>> '{0:x}'.format(18)    # 十六進制
'12'
>>> '{:,}'.format(13111313341313)    # 千分位格式化
'13,111,313,341,313'

  經常使用操做

#索引
s = 'hello'
>>> s[1]
'e'
>>> s[-1]
'o'


>>> s.index('e')
1


#查找
>>> s.find('e')
1
>>> s.find('i')
-1


#移除空白
s = '  hello,world!  '
s.strip()
s.lstrip()
s.rstrip()
s2 = '***hello,world!***'
s2.strip('*')

#長度
>>> s = 'hello,world'
>>> len(s)
11

#替換
>>> s = 'hello world'
>>> s.replace('h','H')
'Hello world'
>>> s2 = 'hi,how are you?'
>>> s2.replace('h','H')
'Hi,How are you?'

#切片
>>> s = 'abcdefghigklmn'
>>> s[0:7]
'abcdefg'
>>> s[7:14]
'higklmn'
>>> s[:7]
'abcdefg'
>>> s[7:]
'higklmn'
>>> s[:]
'abcdefghigklmn'
>>> s[0:7:2]
'aceg'
>>> s[7:14:3]
'hkn'
>>> s[::2]
'acegikm'
>>> s[::-1]
'nmlkgihgfedcba'

  首尾操做及統計字符

 1 >>> name = "HuangQiuShi"
 2 >>> name.capitalize()   # 首字母大寫
 3 'Huangqiushi'
 4 >>> name.endswith("Li")  # 判斷字符串是否以 Li結尾
 5 False
 6 >>> name.endswith("hi")  # 判斷字符串是否以 hi結尾
 7 True
 8 
 9 >>> name.center(50,'-')   # 字符串居中顯示
10 '-------------------HuangQiuShi--------------------'
11 >>> name.rjust(50,'-')
12 '---------------------------------------HuangQiuShi'
13 >>> name.ljust(50,'-')
14 'HuangQiuShi---------------------------------------'
15 
16 >>> name.count("shi")   # 統計'shi'出現次數
17 0
18 >>> name.count("i")
19 2

  zfill(width)方法: 返回指定長度的字符串,原字符串右對齊,前面填充0

  width --指定字符串的長度。原字符串右對齊,前面填充0

>>> str = "example showing how to use zfill"
>>> print(str.zfill(20))
example showing how to use zfill
>>> print(str.zfill(40))
00000000example showing how to use zfill
>>> print(str.zfill(50))
000000000000000000example showing how to use zfill

 

3、基本數據類型——列表 

  定義列表:[]內以逗號分隔,按照索引,存放各類數據類型,每一個位置表明一個元素。

一、列表特性

  1.可存放多個值

  2.按照從左到右的順序定義列表元素,下標從0開始順序訪問,有序

  3.可修改指定索引位置對應的值,可變

二、列表操做

  建立列表

# 列表建立(把逗號分隔的不一樣的數據項使用方括號括起來便可)
list_test = ['阿福','收稅','snake']

  切片:取多個元素

>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下標1至下標4之間的數字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下標1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3] 
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #若是是從頭開始取,0能夠忽略,跟上句效果同樣
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #若是想取最後一個,必須不能寫-1,只能這麼寫
['Rain', 'Tom', 'Amy'] 
>>> names[3:-1] #這樣-1就不會被包含了
['Rain', 'Tom']
>>> names[0::2] #後面的2是表明,每隔一個元素,就取一個
['Alex', 'Eric', 'Tom'] 
>>> names[::2] #和上句效果同樣
['Alex', 'Eric', 'Tom']

  追加、插入

>>> list_test.append(2017)
>>> list_test
['阿福', '收稅', 'snake', 2017]
>>> list_test.insert(2,"強行從snake前面插入")
>>> list_test
['阿福', '收稅', '強行從snake前面插入', 'snake', 2017]
>>> list_test.insert(0,"強行插入最前")
>>> list_test
['強行插入最前', '阿福', '收稅', '強行從snake前面插入', 'snake', 2017]

   修改

>>> list_test = ['強行插入最前', '阿福', '收稅', '強行從snake前面插入', 'snake', 2017]
>>> list_test[2] = "換了一我的"
>>> list_test
['強行插入最前', '阿福', '換了一我的', '強行從snake前面插入', 'snake', 2017]

  刪除

# 刪除指定位置元素
>>> del list_test[2]
>>> list_test
['強行插入最前', '阿福', '強行從snake前面插入', 'snake', 2017]
# 刪除指定元素
>>> list_test.remove("snake")
>>> list_test
['強行插入最前', '阿福', '強行從snake前面插入', 2017]
# 刪除列表最後一個值
>>> list_test.pop()
2017
>>> list_test
['強行插入最前', '阿福', '強行從snake前面插入']

  擴展

>>> b = [1,3,"asdad"]
>>> list_test.extend(b)
>>> list_test
['強行插入最前', '阿福', '強行從snake前面插入', 1, 3, 'asdad']

  拷貝

>>> list_test_copy = list_test.copy()
>>> list_test_copy
['強行插入最前', '阿福', '強行從snake前面插入', 1, 3, 'asdad']

  統計

>>> list_test.append("阿福")
>>> list_test.count("阿福")
2
>>> list_test
['強行插入最前', '阿福', '強行從snake前面插入', 1, 3, 'asdad', '阿福']

  排序&翻轉

 

>>> list_test.sort()     # 不一樣數據類型不能一塊兒排序
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
>>> list_test[-3] = '3'   # 修改成字符串
>>> list_test[-4] = '1'
>>> list_test
['強行從snake前面插入', '強行插入最前', '阿福', '1', '3', 'asdad', '阿福']
>>> list_test.sort()
>>> list_test
['1', '3', 'asdad', '強行從snake前面插入', '強行插入最前', '阿福', '阿福']
>>> list_test.reverse()   # 翻轉
>>> list_test
['阿福', '阿福', '強行插入最前', '強行從snake前面插入', 'asdad', '3', '1']

 

 

 

  獲取下標

 

>>> list_test
['阿福', '阿福', '強行插入最前', '強行從snake前面插入', 'asdad', '3', '1']
>>> list_test.index("阿福")
0
>>> list_test.index("asdad")
4
相關文章
相關標籤/搜索