跟我一起學Python(二):數據類型

字符串

單引號、雙引號、三引號

字符串引號包括單引號'...'、雙引號"..."、三引號"""..."""或者'''...''',比如'abc'"hello world"

三者區別:

  • 三引號是可以換行的

    str1 = """hello
    world
    """
    str2 = '''hello
    world
    '''
    print(str1)
    print(str2)
    

    打印結果:

    hello
    world
    
    hello
    world
    
  • 如果想打印單引號,外面就需要包雙引號或者三引號,或者使用轉義字符

    # 雙引號包單引號
    str1 = "hello 'every' one"
    # 單引號轉義字符
    str2 = 'hello \'every\' one'
    # 三引號包單引號
    str3 = '''hello 'every' one'''
    # 三引號包雙引號
    str4 = '''hello "every" one'''
    # 雙引號轉義字符
    str5 = "hello \"every\" one"
    
    print(str1)
    print(str2)
    print(str3)
    print(str4)
    print(str5)
    

    打印結果:

    hello 'every' one
    hello 'every' one
    hello 'every' one
    hello "every" one
    hello "every" one
    

字符串運算符

下表實例變量 a 值爲字符串 “Hello”,b 變量值爲 “Python”

操作符 描述
+ 字符串連接
* 重複輸出字符串
[] 通過索引獲取字符串中字符
[ : ] 截取字符串中的一部分
in 成員運算符 - 如果字符串中包含給定的字符返回 True
not in 成員運算符 - 如果字符串中不包含給定的字符返回 True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思來使用,沒有轉義特殊或不能打印的字符。 原始字符串除在字符串的第一個引號前加上字母"r"(可以大小寫)以外,與普通字符串有着幾乎完全相同的語法。

例如:

str1 = 'hello'
str2 = 'python'

# 字符串連接
result = str1 + str2
print(result) # hellopython

# 重複輸出字符串
print(str1 * 2) #hellohello

# 通過索引獲取字符串中的字符
print(str1[2]) #l

# 截取字符串中的一部分
print(str2[1:4]) #yth

#判斷字符是否在字符串中,如果存在就返回True
print('y' in str2) #True

#判斷字符串是否不在字符串中
print('y' not in str2) #False

# 原始字符串。本來加上\是否轉義的,例如\n,如果前面加上r,就打印出\n這個字符串
print(r'\n')

string相關函數

方法 描述
string.capitalize() 把字符串的第一個字符大寫
string.center(width) 返回一個原字符串居中,並使用空格填充至長度 width 的新字符串
string.count(str, beg=0, end=len(string)) 返回 str 在 string 裏面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數
string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式解碼 string,如果出錯默認報一個 ValueError 的 異 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是’ignore’或者’replace’
string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符號轉爲空格,tab 符號默認的空格數是 8。
string.find(str, beg=0, end=len(string)) 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1
string.format() 格式化字符串
string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在 string中會報一個異常.
string.isalnum() 如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False
string.isalpha() 如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 False
string.isdecimal() 如果 string 只包含十進制數字則返回 True 否則返回 False.
string.isdigit() 如果 string 只包含數字則返回 True 否則返回 False.
string.islower() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
string.isnumeric() 如果 string 中只包含數字字符,則返回 True,否則返回 False
string.isspace() 如果 string 中只包含空格,則返回 True,否則返回 False.
string.istitle() 如果 string 是標題化的(見 title())則返回 True,否則返回 False
string.isupper() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False
string.join(seq) 以 string 作爲分隔符,將 seq 中所有的元素(的字符串表示)合併爲一個新的字符串
string.ljust(width) 返回一個原字符串左對齊,並使用空格填充至長度 width 的新字符串
string.lower() 轉換 string 中所有大寫字符爲小寫.
string.lstrip() 截掉 string 左邊的空格
string.maketrans(intab, outtab\]) maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
string.partition(str) 有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.rfind(str, beg=0,end=len(string) ) 類似於 find()函數,不過是從右邊開始查找.
string.rindex( str, beg=0,end=len(string)) 類似於 index(),不過是從右邊開始.
string.rjust(width) 返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串
string.rpartition(str) 類似於 partition()函數,不過是從右邊開始查找
string.rstrip() 刪除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 爲分隔符切片 string,如果 num 有指定值,則僅分隔 num+ 個子字符串
string.splitlines([keepends\]) 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一個包含各行作爲元素的列表,如果參數 keepends 爲 False,不包含換行符,如果爲 True,則保留換行符。
string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查.
string.strip([obj\]) 在 string 上執行 lstrip()和 rstrip()
string.swapcase() 翻轉 string 中的大小寫
string.title() 返回"標題化"的 string,就是說所有單詞都是以大寫開始,其餘字母均爲小寫(見 istitle())
string.translate(str, del="") 根據 str 給出的表(包含 256 個字符)轉換 string 的字符,要過濾掉的字符放到 del 參數中
string.upper() 轉換 string 中的小寫字母爲大寫
string.zfill(width) 返回長度爲 width 的字符串,原字符串 string 右對齊,前面填充0

整數

在python中,整數表示任意大小的正整數、負整數和0。並且在python3中,長整形也是int表示,沒有Long。

這裏我們記下python算數運算符。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cUb3Xw95-1592402061833)(/home/wtian/Desktop/python算數運算符.png)]

浮點數

浮點數指帶小數的數字。

計算浮點數要特別小心,看下面的例子:

print(0.55+0.41)
print(0.55+0.4)
print(0.55+0.411)

計算結果:

0.96
0.9500000000000001
0.9610000000000001

布爾值

布爾值包括TrueFalse兩種(注意大小寫)。

print(1==1)
print(1!=1)

輸出結果:

True
False

布爾運算:

布爾值可以用 andornot 運算。

and 運算是與運算,只有所有都爲 True,and 運算結果纔是 True。

or 運算是或運算,只要其中有一個爲 True,or 運算結果就是 True。

not 運算是非運算,它是一個單目運算符,把 True 變成 False,False 變成 True。

# and不能使用&&
print(True and True)
# or不能使用||
print(True or False)
# not不能使用!
print(not True)

空值

None表示空值,區別與java的null

基本數據類型轉換

方法 說明
int(x [,base ]) 將x轉換爲一個整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 創建一個複數
str(x ) 將對象 x 轉換爲字符串
repr(x ) 將對象 x 轉換爲表達式字符串
eval(str ) 用來計算在字符串中的有效 Python 表達式,並返回一個對象
tuple(s ) 將序列 s 轉換爲一個元組
list(s ) 將序列 s 轉換爲一個列表
chr(x ) 將一個整數轉換爲一個字符
unichr(x ) 將一個整數轉換爲 Unicode 字符
ord(x ) 將一個字符轉換爲它的整數值
hex(x ) 將一個整數轉換爲一個十六進制字符串
oct(x ) 將一個整數轉換爲一個八進制字符串

轉義字符

轉義字符 描述
\ (在行尾時) 續行符
\\ 反斜槓符號
\' 單引號
\" 雙引號
\a 響鈴
\b 退格(Backspace)
\e 轉義
\000
\n 換行
\v 縱向製表符
\t 橫向製表符
\r 回車
\f 換頁
\oyy 八進制數,yy代表的字符,例如:\o12代表換行
\xyy 十六進制數,yy代表的字符,例如:\x0a代表換行
\other 其它的字符以普通格式輸出

列表List和元組Tuple

列表List

其實列表就是用中括號 [] 括起來的數據,每個元素用,隔開,並且每個元素可以是不同的數據類型

usernames = ['zhangsan','lisi',123]

訪問列表

  • 通過索引來訪問,索引從0開始

    print(usernames[1]) # lisi
    
  • 基於索引截取部分元素

    區間範圍通過[:]表示,遵循左閉右開,包括左邊的索引位的元素,但是不包括右邊的。

    print(usernames[0:2]) # ['zhangsan','lisi'],沒有元素123
    print(usernames[:2]) # ['zhangsan','lisi']
    print(usernames[:]) # 全部元素
    

更新列表

  • 修改某個索引位的值

    usernames[2] = 'wanger'
    print(usernames)
    
  • 追加值

    usernames.append(456)
    print(usernames) # ['zhangsan','lisi',123,456]
    

刪除元素

通過del刪除。

del usernames[1]

List運算符

Python 表達式 結果 描述
len([1, 2, 3]) 3 計算元素個數
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 組合
['Hi!'] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 複製
3 in [1, 2, 3] True 元素是否存在於列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代

List函數與方法

函數&方法 描述
len(list) 列表元素個數
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 將元組轉換爲列表
list.append(obj) 在列表末尾添加新的對象
list.count(obj) 統計某個元素在列表中出現的次數
list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
list.index(obj) 從列表中找出某個值第一個匹配項的索引位置
list.insert(index, obj) 將對象插入列表指定索引位置
list.pop(obj=list[-1]) 移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
list.remove(obj) 移除列表中的一個元素(參數是列表中元素),並且不返回任何值
list.reverse() 反向列表中元素
list.sort([func]) 對原列表進行排序,排序的元素需要是同一種數據類型

元組Tuple

Tuple就是固化的List。List屬於可變集合,可以append、insert或者del。但是Tuple不行,一旦形成就不能再改變,因此也更安全。

儘量能用Tuple代替List。

  • 創建Tuple,使用(x,x,x)的形式,區別與List的[x,x,x]

    tuple1 = ("zhangsan","lisi",123,456)
    tuple2 = "zhangsan","lisi",123,456
    
    • 創建空tuple

      tuple = ()
      
    • tuple如果只包含一個元素,需要在後面加,。如果不加,就代碼是數字,而不是tuple。

      tuple = (123,)
      

訪問Tuple

#-*-coding:utf-8-*-

tuple1=('兩點水','twowter','liangdianshui',123,456)
tuple2='兩點水','twowter','liangdianshui',123,456

print(tuple1[1])
print(tuple2[0])

修改tuple

本來Tuple是不可修改的,但是Tuple如果跟List結合,將List作爲Tuple的元素。此時通過修改List就可以修改值,注意:List是引用傳遞,所以外面修改了List的值,就會影響到Tuple裏的List。

list = ["張三","李四"]
tuple = (123,456,list)
print("tuple="+str(tuple)) # tuple=(123, 456, ['張三', '李四'])

list.append("王二")
print("tuple="+str(tuple)) # tuple=(123, 456, ['張三', '李四', '王二'])

刪除tuple

tuple是不允許被刪除的,但是可以刪除整個tuple。

tuple = (123,456)
del tuple

tuple運算符

Python 表達式 結果 描述
len((1, 2, 3)) 3 計算元素個數
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 連接
('Hi!',) * 4 (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) 複製
3 in (1, 2, 3) True 元素是否存在
for x in (1, 2, 3): print(x) 1 2 3 迭代

tuple內置函數

方法 描述
len(tuple) 計算元組元素個數
max(tuple) 返回元組中元素最大值
min(tuple) 返回元組中元素最小值
tuple(seq) 將列表轉換爲元組

字典Dict和集合Set

Dict

Dict相當於Java的Map,形如JSON

users = {"1":"張三","2":"李四"}

訪問字典

dict = {1001:"張三",1002:"李四",1003:"王五"}
print(dict[1001])

修改字典

dict = {1001:"張三",1002:"李四",1003:"王五"}
# 添加元素
dict[1004] = "唐六"
print(dict)

# 修改元素
dict[1003] = "王二"
print(dict)

刪除字典

dict = {1001:"張三",1002:"李四",1003:"王五"}
# 通過key刪除
del dict[1002]
print(dict)

# 清空dict
dict.clear()
print(dict)

# 刪除字典
del dict

字典函數和方法

方法和函數 描述
len(dict) 計算字典元素個數
str(dict) 輸出字典可打印的字符串表示
type(variable) 返回輸入的變量類型,如果變量是字典就返回字典類型
dict.clear() 刪除字典內所有元素
dict.copy() 返回一個字典的淺複製
dict.values() 以列表返回字典中的所有值
popitem() 隨機返回並刪除字典中的一對鍵和值
dict.items() 以列表返回可遍歷的(鍵, 值) 元組數組

注意事項

  • 字典的元素的key值需要保持唯一,如果不唯一,以最後一個爲準;
  • 字典的key必須是不可變類型,例如數字、字符、元組,不能是list;
  • 字典的元素的順序和key的存放順序沒有任何關係;
  • 字典查詢速度快,佔用內存大;list相反。

Set

Set是一個無序和不重複元素集。

創建Set

set1 = set([123,456])
print(set1) # {456, 123} 從結果可以看出一是無序,二是跟dict一樣都是{}包圍.

添加元素

通過add(element)添加元素。

刪除元素

通過remove(element)刪除元素。

運用Set

Set可以用來做交集、差集、並集等運算。

# 交集
set1 = set('hello')
set2 = set(['h','a','l','o','b','c'])
set3 = set1 & set2
print(set3)

#並集
set4 = set1 | set2
print(set4)

#差集
set5 = set1 - set2
print(set5)

set6 = set2 - set1
print(set6)

# 去除重複元素
list = ["111","222","333","111","444","222","333"]
set7 = set(list)
print(set7)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章