python基礎2.0版(2)-數據類型

思維導圖

在這裏插入圖片描述

一.鏈式賦值_系列解包賦值_常量

  • 鏈式賦值

鏈式賦值用於同一個對象賦值給多個變量

>>> x=y=23
>>> x
23
>>> y
23
  • 系列解包賦值

系列數據賦值給對應相同個數的變量(個數必須保持一致)

>>> a,b,c=1,3,5
>>> a
1
>>> c
5
  • 常量

Python不支持量,即沒有語法規則限制改變一個前量的值。我們只能約定變量的命名規則,以及在程序的邏輯上不對常量的值作出修改。

>>> MAX_SPEED =120
>>> MAX_SPEED
120
>>> MAX_SPEED =150 # 實際是可以改的.凡能邏組上不做
>>> MAX_SPEED
150

二.最基本內置數據類型介紹

每個對象都有類型,Python 中最基本的內置數據類型:
1.整型
整數,2345,10,50
2.浮點型
小數,3.14或者科學數法314e-2
3.布爾型
表示真假,僅包含: True、False
4.字符串型
由字符組成的序列。“abc”,”程序員”

三.數字運算

import pandas as pd
data = {'operate': ['+', '-', '*', '/', '//', '%','**'],
        'example': ['1+2.2', '5-2.5', '2*8', '8.2/2', '8.2//2', '9%2', '2**3'],
        'result':['3.2', '2.5', '16', '4.1', '4.0', '1', '8']}
print(pd.DataFrame(data))

  operate example result
0       +   1+2.2    3.2
1       -   5-2.5    2.5
2       *     2*8     16
3       /   8.2/2    4.1
4      //  8.2//2    4.0
5       %     9%2      1
6      **    2**3      8

//——整數除法
/——浮點數除法
注意:除數爲0,會產生異常

>>> 6/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

使用divmod()函數同時得到商和餘數

>>> divmod(50,3)
(16, 2)

四.整型

  • 進制

Python 中,除10進制,還有其他三種進制:
0b 或0B,二進制 0 1
0o或0O,八進制 0 1 2 3 4 5 6 7
0x 或0x,十六進制0 1 2 3 4 5 6 7 8 9 a b c d e f

>>> 0b5
  File "<stdin>", line 1
    0b5
     ^
SyntaxError: invalid token
>>> 0b101
5
>>> 0o101
65
>>> 0x101
257
  • int()實現類型轉換:

1.浮點數直接捨去小數部分。如:int(9.9):結果是:9
2.布爾值True轉爲1, False轉爲0.如; intTrue)結果是1
3. 字符串符合整數格式(浮點數格式不行)則直接轉成對應整數,否則報錯。

>>> int('123')
123
>>> int('123a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '123a'
  • 自動轉型

整數和浮點數混合運算,表達式結果自動轉成浮點數,可以看上面運算符實例

  • 整數取值範圍

Python2中, int是32位,可以存儲從-2147483648到2147483647的整數(約21億)。 Long類型是64位,可以存儲:-263–263-1之間的數值。
Python3中, int 可以存儲任意大小的整數, long 被取消。

>>> googol=10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Googol 是Google最初的名字,這也是Google 最初的合義,
Python3中可以做超大數的計算,而不會造成“整數溢益出”這也是Python特別適合科學運算的特點。

五.浮點型

  • 浮點數

浮點數稱爲 float
浮點數用科學計數法表示,比如:3.14 表示成:314E-2或者314e-2。這些數字在內存中也是按照科學計數法存儲。
類型轉換和四捨五入

  1. 類似於int(),可以使用float()將其他類型轉化成浮點數。
  2. 整數和浮點數混合運算時,表達式結果自動轉型成浮點數。比如:2+8.0的結果是10.0
    3.round(value)同以返回四捨五入的值
    注:但不會改變原有值,而是產生新的值
>>> a=3.14159
>>> round(a)
3
>>> a
3.14159
  • 增強型賦值運算符

在這裏插入圖片描述
+=中間不能加空格

>>> a+=1
>>> a
4.14159
>>> a+ =1
  File "<stdin>", line 1
    a+ =1
       ^
SyntaxError: invalid syntax

六.數字運算實例

實例一:時間表示

計算機中時間的表示是從"1970年1月1日 00:00:00”開始,以毫秒(1/1000秒)進行計算,我們也把 1970年這個時刻稱爲“unix 時間點”

python 中可以通過time.time()獲得當前時刻,返回的值是以秒爲單位,帶微秒(1/1000毫秒)精度的浮點值。

>>> time.time()
1583920677.3545372
>>> a=int(time.time())
>>> a
1583920717
>>> totalMinute=a//60 #總分鐘數
>>> totalMinute
26398678
>>> totalHours=totalMinute//60  #總小時數
>>> totalHours
439977
>>> totalYears=totalHours//24//365
>>> totalYears
50

從1970到現在2020年,相差50年

實例二:計算兩點距離

import math
#定義兩個點
x1,y1=1,1
x2,y2=2,3
#計算距離
distance=math.sqrt((x1-x2)**2+(y1-y2)**2)
>>>distance
2.23606797749979

七.布爾型

  • 布爾值

python2中沒有布爾值,用0表示False,用1表示True
python3中,False、True都是關鍵字,本質還是0和1

>>> a=True
>>> b=1
>>> a+b
2
  • 邏輯運算符

在這裏插入圖片描述

>>> x=1
>>> y=0
>>> x or y
1
>>> x and y
0
>>> not x
False


>>> x=0
>>> y=1
>>> x or y
1
  • 比較運算符

返回1表示真,返回0表示假,分別和True、False等價
在這裏插入圖片描述

>>> a=1
>>> b=2
>>> a==b
False
>>> a!=b
True
>>> a>b
False

八.同一運算

在這裏插入圖片描述
is 與==的區別:

  • is 判斷兩個變量是否引用同一個對象,即是比較對象的地址

在這裏插入圖片描述

  • == 判斷兩個變量引用的對象的值是否相等,默認調用對象的_eq_()方法

在這裏插入圖片描述

>>> a=1000
>>> b=1000
>>> a==b
True
>>> a is b
False
>>> id(a)
2251637956496
>>> id(b)
2251638998416
  • 總結

1、 is 比較兩個對象的 id 值是否相等,是否指向同一個內存址
2、== 比較的是兩個對象的內容是否相等,值是否相等:
3、小整數對象[-5, 256]在全局解釋器範圍內被放入緩存供重複用

>>> a=1
>>> id(a)
140713390940560
>>> b=1
>>> id(b)
140713390940560

4、is運算符比==效率高,在變量和None 進行比較時應該使用is。

九.字符串類型

1.字符串創建

  • 字符串基本特點

字符串的本質是:字符序列。 Python 的字符串是不可變的,我們無法對原字符電做任何修次。但,可以將字符串的—部分複製到新創建的字符串,達到“看起來修改”的效果。
Python不支持單字符類型,單字符也是作爲-個字符申使用的。

  • 字符串的編碼

Python3直接支持Unicode,可以表示世界上任何書面語言的字符。 Python3的字符默認就是16位 Unicode編碼,AscⅡ 碼是Unicode編碼的子集。
使用內置函數 ord()可以把字符轉換成對應的 Unicode 碼;
使用內置函數 chr()可以把十進制數字轉換成對應的字符。

>>> ord('好')
22909
>>> chr(128888)
'\U0001f778'
>>> chr(122)
'z'
  • 引號創建字符串

單引號,雙引號
使雙引號的好處是創建本身就包含引號的字符串,不需要轉義

>>> a='tom's pen'
  File "<stdin>", line 1
    a='tom's pen'
           ^
SyntaxError: invalid syntax
>>> a='tom\'s pen'
>>> a
"tom's pen"
>>> a="tom's pen"
>>> a
"tom's pen"

三引號:三個單引號或者三個雙引號,可以創建多行字符串

>>> b='''i
... love
... u'''
>>> b
'i\nlove\nu' #因爲換行,顯示換行符
  • 空字符串和len()函數

python允許空字符串存在,長度爲0,空字符串表示爲:‘’(中間不加空格)
len()用於計算字符串含有多少字符,數字是不行的

>>> len('')
0
>>> a=1231564
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> a='1231564'
>>> len(a)
7

2.轉義、拼接、複製

  • 常用的轉義字符及含義

轉義字符 含義
(在行尾時) 續行符
\     反斜槓符號
’ 單引號
" 雙引號
\a 響鈴(系統發出)
\b 退格(Backspace)
\e 轉義
\000 終止符,\000後的字符全部忽略
\n 換行
\v 縱向製表符
\t 橫向製表符
\r 回車符
\f 換頁符
\o 八進制數代表的字符
\x 十六進制數代表的字符

  • 實驗:
>>> a='i\nlove\nu'
>>> a
'i\nlove\nu'
>>> print(a)
i
love
u

注:加r實現不轉義

>>> a=r'i\nlove\nu'
>>> print(a)
i\nlove\nu
  • 字符串拼接

1.可以使用+將多個字符串拼接起來,例如:‘a’+‘b’=‘ab’
(1) 如果+兩邊都是字符串,則拼接。
(2) 如果+兩邊都是數字,則加法運算
(3) 如果+兩邊類型不同,則拋出異岸。

>>> 'a'+'c'
'ac'
  • 字符串複製

使用* 實現複製

>>> 'ac'*3
'acacac'
  • 不換行打印

調用end=‘’

print('a',end='')
print('a',end='+')
-> aa+
  • 從控制檯讀取字符串

調用input()

>>> name=input("請輸入名字:")
請輸入名字:小二
>>> name
'小二'

3.提取和替換字符

str()將其他數據類型轉爲字符型
用[]提取字符
字符串的本質就是字符序列,我們可以通過在字符串後面添加[],在[]裏面指定偏移量:可以提取該位置的單個字符。

  • 正向搜索:

最左側第一個字符,偏移量是0,第二個偏移量是1,以此類推。直到len(str)-1爲止。

  • 反向搜索:

最右側第一個字符,偏移量是-1,倒數第二個偏移量是-2,以此類推,直到-lenstr()爲止。

>>> a='123456789'
>>> a[0]
'1'
>>> a[-3]
'7'
  • replace()替換

字符串是不可以直接修改的,若要替換字符串中某一部分,只有通過創建新的字符串實現

>>> a[0]=2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> a.replace('1','2')
'223456789'
>>> a
'123456789'

整個過程是創建了新的字符串對象,並指向了a,不是修改了a。地址不一樣

>>> id(a.replace('1','2'))
2251639325808
>>> id(a)
2251639265584

4.切片slice操作

切片操作可以快速提取字符串,標準格式爲[起始偏移量:終止偏移量:步長]

  • 三個變量位正數:

在這裏插入圖片描述

  • 三個變量位負數:

在這裏插入圖片描述
注:偏移量不在字符串長度範圍內也不會報錯

>>> a='123456789'
>>> a[0:11]
'123456789'

5.分割與合併

  • split()可以基於指定分隔符將字符串分隔成多個子字符串(存到列表裏),不指定默認用空白字符(換行、空格、製表符)
>>> c='i love u'
>>> c.split()
['i', 'love', 'u']
  • join()作用於split()相反,起連接作用
>>> d=['i', 'love', 'u']
>>> '*'.join(d)
'i*love*u'

注意:+和join()都能拼接,但是join()速度更快

import time
t1=time.time() #start
a=" "
for i in range(10000):
    a+='vs'
t2=time.time() #end
print("運算時間:"+str(t2-t1))

t3=time.time()
b=[]
for i in range(10000):
    b.append('vs')
a=" ".join(b)
t4=time.time()
print("運算時間:"+str(t4-t3))

運算時間:0.01099538803100586
運算時間:0.008993864059448242

6.駐留機制和成員操作符

  • 字符串駐留機制和字符串比較

字符串駐留:僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串駐留池中,
Python支持字符串駐留機制,對於符合標識符規則的字符串(僅包含下劃線(_)、字母和數字)會啓用字符串駐留機制。

>>> a='1_2'
>>> b='1_2'
>>> a is b
True
>>> c='1*2'
>>> d='1*2'
>>> c is d
False
  • 成員操作符

in
not in
判斷某個字符串是否在字符串全體中

>>> x='abcd'
>>> 'a' in x
True
>>> 'e' in x
False

6.format格式化

  • format()基本用法

str.format(),增強了字符串格式化的功能。
基本語法是通過{}和:來代替以前的%。
format 函數可以接受不限個參數,位置可以不按順序

>>> a="名字:{0},年齡:{1},{0}是個搗蛋鬼"
>>> a.format("小二","8")
'名字:小二,年齡:8,小二是個搗蛋鬼'
>>> a="名字:{name},年齡:{age}"
>>> a.format(age=8,name="小二")
'名字:小二,年齡:8'

#用%s
>>> print("名字:"'%s' %'小二')
名字:小二
  • 填充與對齊

填充常跟對齊一起使
^、<、>分別是居中、左對齊、右對齊,後面帶寬度
:號後面帶填充的字符,只能是一個字符,不指定的話默認是用空格填

>>> "{:+<5}".format("123")
'123++'
  • 數字格式化

浮點用f,整數用d

>>> a="存款:{:.2f}"
>>> a.format(8888.8888)
'存款:8888.89'

在這裏插入圖片描述

7.擴展

  • 常用查找方法
>>> a="我是小二,今年8歲了,喜歡調皮搗蛋"
>>> len(a) #字符串長度
17
>>> a.startswith("我是") #以指定字符串開頭
True
>>> a.endswith("蛋") #以指定字符串結尾
True
>>> a.find('8') #第一次出現指定字符串的位置
rfind() #最後一次出現指定字符串的位置
  • 大小寫轉換
str = "www.runoob.com"
print(str.upper())          # 把所有字符中的小寫字母轉換成大寫字母
print(str.lower())          # 把所有字符中的大寫字母轉換成小寫字母
print(str.capitalize())     # 把第一個字母轉化爲大寫字母,其餘小寫
print(str.title())          # 把每個單詞的第一個字母轉化爲大寫,其餘小寫 
>>>
WWW.RUNOOB.COM
www.runoob.com
Www.runoob.com
Www.Runoob.Com
  • 格式排版

center(),ljust(),rjust()分別對應居中、左對齊、右對齊

>>> a='123'
>>> a.center(5,'*')
'*123*'

5是字符串長度,‘*’是填充字符,不指定填充字符,默認爲空格

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章