Python-基礎-day3

来源:https://www.cnblogs.com/aihuidi/archive/2019/02/23/10424859.html
-Advertisement-
Play Games

基礎數據類型 1、什麼是數據類型? 我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行 ...


基礎數據類型                                                    

1、什麼是數據類型?

  我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行了明確的劃分,你想讓電腦進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字元串類型給他。Python中常用的數據類型有多種,如下:

 整數(int) 、字元串(str)、布爾值(bool)、列表(list)、元組(tuple)、字典(dict)、集合(set)

2、基礎數據類型

2.1、數字(int)

數字使用來計算的,使用場景不多,我們知道有這個數據類型,會使用一種即可:

#數字int
#bit_length() 當十進位用二進位表示時,最少使用的位數
aihuidi = 11
data = aihuidi.bit_length()
print(data)

2.2、布爾值(bool)

布爾值就兩種:True、False。含有條件就時正確與不正確(否)

真  1  True

假  0  False

2.3、

字元串(str)

字元串的索引與切片

索引即下標,就時字元串組成的元素從第一個開始,初始索引為0以此往後推。

#索引:
aihuidi = 'ABCDEFGHIJKLMNOPQRSTUVWSXYZ' print(aihuidi[0]) print(aihuidi[3]) print(aihuidi[8]) print(aihuidi[23])

切片就是通過索引(索引:索引:步長)截取字元串的一段,形成新的字元串(原則就是顧頭不顧腚)。

#切片:
aihuidi = 'ABCDEFGHIJKLMNOPQRSTUVWSXYZ'
print(aihuidi[0:8])
print(aihuidi[3:16])
print(aihuidi[0:])     #預設列印到最後一個
print(aihuidi[0:-1])   #-1 是列表中的最後一個元素,但是要滿足顧頭不顧腚的原則,所以取不到Z元素
print(aihuidi[0:5:2])   #加步長
print(aihuidi[5:0:-2])   #反向加步長

字元串的常用方法。

name = "aihuidi"
print(name.capitalize())  #首字母大寫
print(name.swapcase())   #大小寫反轉
hhh = 'dong liu weu mng'
print(hhh.title())     #每個單詞的首字母大寫
#內同居中,總長度為20,空白處以*填充
a1 = '1a3a45haj'
ret2 = a1.center(20,"*")
print(ret2)
#a在字元串中的元素出現的個數
ret3 = a1.count("a",0,8)   #可切片
print(ret3)
a4 = "aihuidi is my hhh"
ret4 = a4.startswith('aihuidi')    #.startswith判斷是否以'aihuidi'開頭,是的話返回True,不是返回False
ret4 = a4.startswith('my',11,13)
print(ret4)
ret4 = a4.endswith('h')    #.endswithh判斷是以'h'結尾,是的話返回True,不是返回False
print(ret4)
#尋找字元串中的元素是否存在
ret5 = a4.find("is",8,10)
print(ret5)  #如果存在返回找到的元素的索引,找不到返回-1

ret6 = a4.index("is",8,10)    #如果存在返回找到的元素的索引,找不到報錯
print(ret6)

#.split 以什麼分割,最終形成一個列表,然而此列表不含有這個分割的元素
ret7 = 'title,Tilte,atre,'.split('t')
print(ret7)

#format的三種使用,格式化輸出
res='{} {} {}'.format('aihuidi',19,'hhh')
res1='{2} {0} {1}'.format('aihuidi',19,'hhh')
res2='{name} {age} {your}'.format(your='hhh',age='19',name='aihuidi')
print(res)
print(res1)
print(res2)

#strip用於移除字元串頭尾指定的字元,註意:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。
name = '*aihuidi**'
print(name.strip('*'))   #去除首尾的*
print(name.lstrip('*'))
print(name.rstrip('*'))

#replace字元串中的 old(舊字元串) 替換成 new(新字元串)
name = 'aihuidi hhhh is shi ge ddddd aihuidi'
print(name.replace('aihuidi','你是',1))  #把'aihuidi'替換成'你是'
#is系列
name = 'aihuidi678'
print(name.isalnum())   #字元串由字母或數字組成的
print(name.isalpha())   #字元串只由字母組成
print(name.isdigit())   #字元串只由數字組成

2.3、元組(tuple)

元組被稱為只讀列表,即數據可以被查詢,但不能被修改,所以,字元串的切片操作同樣適用於元組。例:(1,2,3)("a","b","c")

2.4、列表(list)

列表是python中的基礎數據類型之一,其他語言中也有類似於列表的數據類型,比如js中叫數組,他是以 [] 括起來,每個元素以逗號隔開,而且他裡面可以存放各種數據類型比如:

list = ['aihudi',233,(5,6,'hhh'),[7,8,'dddd'],{'nnnn'}]
列表相比於字元串,不僅可以儲存不同的數據類型,而且可以儲存大量數據,32位python的限制是 536870912 個元素,64位python的限制是 1152921504606846975 個元素,
而且列表是有序的,有索引值,可切片,方便取值。
#增
list = ['aihuidi',1,6,8,'hhhh',9] list.insert(0,55) #按照索引去增加 list.insert(2,66) list.append('mmm') #增加到最後 list.extend(['q,f,b']) #迭代的去增 list.extend('jjjj') print(list) # li = ['hhhh','nnnn',1,6,8,'add'] ll = li.pop(1) #按照位置進行刪除,有返回值,"返回的就是你所刪除的那個" print(ll) del li[1:4] #可以按位置刪除,也可以切片刪除沒有返回值 print(li) li.remove('add') #按照元素進行刪除,沒有返回值 print(li) li.clear() #清空列表 # lll = [2,4,6,8,10,'aihuidi','a'] lll[0] = 12 lll[5] = 'hhhhh' lll[2:4] = ['b','n'] print(lll) # 切片去查,或者迴圈去查。

其他一些操作用法

#count用法:計算或 統計某個元素出現的次數
aaa = ["a","b","a","k","e"]
print(aaa.count("a"))
#index用法:從列表中找出某個值第一個匹配項的索引位置
print(aaa.index("k"))
#sort用法:用於在原位置對列表進行排序
bbb = [3,5,1,4,2]
bbb.sort()
print(bbb)
#reverse用法:將列表中的元素反向存放
bbb.reverse()
print(bbb)

2.5、字典(dict)

字典是python中唯一的映射類型,採用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,如:數字、字元串、元組。

  字典(dictionary)是除列表意外python之中最靈活的內置數據結構類型。列表是有序的對象結合字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。

字典的語法:

#key-value
info = {
    'stu1': "aihuidi",
    'stu2': "hhhh",
    'stu3': "dddd",
}
print(info)
print(info["stu1"])

基礎使用:

info = {
    'stu1': "aihuidi",
    'stu2': "hhhh",
    'stu3': "dddd",
}
# print(info)
# print(info["stu1"])
#增加
info["stu4"] = "laili"
print(info)
#修改
info["stu1"] = "愛輝弟"
print(info)
#刪除
info.pop("stu1")
print(info)    #標準化刪除方式
del info["stu2"]
print(info)    #另一種刪除方式
info.popitem()  #隨機刪除
print(info)
#
info1 = {'stu01': 'aihuidi', 'stu02': 'zhidao','stu03': 'hoade'}
value = info1['stu02']     #有就返回值,沒有就報錯
value1 = info1.get('stu06',"沒有")  #有就返回對應的值,沒有就返回設定的值''沒有''
print(value)
print(value1)

字典的迴圈

#字典的迴圈
dic = {"name": "aihuidi","age":19,"nono":"aiai"}
for key in dic:
    print(key)
for item in dic.items():
    print(item)
for key,value in dic.items():
    print(key,value)

其他操作

item = dic.items()
print(item,type(item))  # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
# 這個類型就是dict_items類型,可迭代的

keys = dic.keys()
print(keys,type(keys))  # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>

values = dic.values()
print(values,type(values))  # dict_values(['male', 18, 'jin']) <class 'dict_values'>     #同上

輸出結果如下:

2.6、集合(set)

集合是無序的,不重覆的數據集合,它裡面的元素是可哈希的(不可變類型),但是集合本身是不可哈希(所以集合做不了字典的鍵)的。

以下是集合最重要的兩點:

  • 去重,把一個列表變成集合,就自動去重了
  • 關係測試,測試兩組數據之前的交集、差集、並集等關係
#set 集合
set1 = set({1,2,'barry'})
set2 = set({1,2,'barry'})
print(set1,set2)
#結果:{1, 2, 'barry'} {1, 2, 'barry'}
#
set1 = {'aihuidi','hhhh','work','ordinary'}
print(set1)
#結果:{'work', 'aihuidi', 'hhhh', 'ordinary'}
set1.add('self-discipline')
print(set1)
#結果:{'work', 'aihuidi', 'hhhh', 'ordinary', 'self-discipline'}
#update:迭代的增加
set1.update('strong')
print(set1)
#結果:{'aihuidi', 'g', 'r', 'o', 'n', 't', 'work', 's', 'hhhh', 'ordinary', 'self-discipline'}
set1.update('nonoea')
print(set1)
#結果:{'aihuidi', 'g', 'a', 'r', 'o', 'n', 't', 'work', 'e', 's', 'hhhh', 'ordinary', 'self-discipline'}
#集合的刪
set1 = {'aihuidi','hhhh','work','ordinary'}
set1.remove('work')
print(set1)
#結果:{'ordinary', 'hhhh', 'aihuidi'}
set1.pop()   #隨機刪除
print(set1)
#結果: #因是隨機的所以產生的結果不一樣

集合的其他操作

交集

#交集(&或者intersection)
set1 = {1,3,5,7,9}
set2 = {1,4,3,8,10}
print(set1 & set2)   #兩個集合里都有1和3{1,3}
#結果:{1, 3}

並集

#並集(\ 或者 union)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)
#結果:{1, 2, 3, 4, 5, 6, 7, 8}
print(set2.union(set1))
#結果:{1, 2, 3, 4, 5, 6, 7, 8}

差集

#差集(- 或者 difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)
#結果:{1, 2, 3}
print(set2 - set1)
#結果:{8, 6, 7}
print(set1.difference(set2))
#結果:{1, 2, 3}
print(set2.difference(set1))
#結果:{8, 6, 7}

反交集

#反交集 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5,10}
set2 = {4,5,6,7,8}
print(set1 ^ set2)   #兩個集合里都有{4,5}
#結果:{1, 2, 3, 6, 7, 8, 10}
print(set1.symmetric_difference(set2))
#結果:{1, 2, 3, 6, 7, 8, 10}

子集與超集

#子集和超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2)
#結果:True
print(set1.issubset(set2))  #這兩個相同,都是說明set1是set2子集
#結果:True
print(set2 > set1)
#結果:True
print(set2.issubset(set1))  #這兩個相同,都是說明set2是set1超集
#結果:False
frozenset不可變集合,讓集合變化不可類型
#frozenset不可變集合,讓集合變化不可類型
s = frozenset('abcde')
print(s,type(s))
#結果:frozenset({'d', 'a', 'e', 'b', 'c'}) <class 'frozenset'>

基礎數據類型的總結         

按存儲空間的占用分(從低到高)

數字
字元串
集合:無序,即無序存索引相關信息
元組:有序,需要存索引相關信息,不可變
列表:有序,需要存索引相關信息,可變,需要處理數據的增刪改
字典:無序,需要存key與value映射的相關信息,可變,需要處理數據的增刪改

按存值個數區分

標量/原子類型 數字,字元串
容器類型    列表,元組,字典

按可變不可變區分

可變   列表,字典
不可變   數字,字元串,元組,布爾值

按訪問順序區分

直接訪問     數字
順序訪問(序列類型) 字元串,列表,元組
key值訪問(映射類型) 字典

2.7、其他(for、enumearte、range) 

for迴圈:用戶按照順序迴圈可迭代對象的內容msg = '愛輝弟要加油學習python哦'


msg = '愛輝弟要加油學習python哦'
for item in  msg:
    print(item)
#結果:









p
y
t
h
o
n

li = ['aihuidi','hhhh','sache','delte']
for i in li:
print(i)
#結果:
# aihuidi
# hhhh
# sache
# delte

dic = {'name':'aihuidi','age':19,'sex':'man'}
for k,v in dic.items():
print(k,v)
#結果:
# sex man
# name aihuidi
# age 19

enumerae:枚舉,對於一個可迭代的(iterable)/可遍歷的對象(如:列表、字元串),

enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。

kk = ['aihuidi','無敵','廠子','專業']
for i in enumerate(kk):
    print(i)
#結果:
# (0, 'aihuidi')
# (1, '無敵')
# (2, '廠子')
# (3, '專業')
for index,name in enumerate(kk,1):
    print(index,name)
#結果:
# 1 aihuidi
# 2 無敵
# 3 廠子
# 4 專業

for index, name in enumerate(kk, 100):   #起始位置預設是0,也可根據場景進行更改
    print(index, name)
#結果:
# 100 aihuidi
# 101 無敵
# 102 廠子
# 103 專業

range:指定範圍內,生成指定數字

for i in range(1,10):
    print(i)
#結果:
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

for i in range(1,10,2):    #步長
    print(i)
#結果:
# 1
# 3
# 5
# 7
# 9
for i in range(10,1,-2):    #反向步長
    print(i)
#結果:
# 8
# 6
# 4
# 2

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近期有一個需求,需要對優惠券可用商品列表加個排序,只針對面值類的券不包括折扣券。 需求是這樣的,假設有一張面值券 50 塊錢,可用商品列表 A 100、B 40、C 10,當用戶查詢當前券可用商品列表的時候優先將卡券可以直接抵扣且不需要用戶在額外支付的商品排在前面。 ...
  • 編程界不論是PHP、Python都有這麼兩種編程思想,oop面向對象、pop面向過程,這兩種在功能上沒有多大區別,但是在代碼編寫上卻有很大區別。今天就記錄一下麵向對象和麵向過程的優點、缺點、定義、實現過程。 oop 面向對象 面向對象有兩個重要的概念:類和對象。 什麼是類?類是具備某項功能的抽象模型 ...
  • 作者:中華石杉 來源:https://github.com/doocs/advanced java/blob/master/docs/high concurrency/mq time delay and expired failure.md 一、面試題 如何解決消息隊列的延時以及過期失效問題?消息隊 ...
  • 題意 "題目鏈接" Sol 這題可以動態dp做。 設$f[i]$表示以$i$為結尾的最大子段和,$g[i]$表示$1 i$的最大子段和 那麼 $f[i] = max(f[i 1] + a[i], a[i])$ $g[i] = max(g[i 1], f[i])$ 發現只跟前一項有關,而且$g[i]從 ...
  • 寫在前面的話: 在第一學期做項目的時候用到過相應的知識,覺得挺有趣的,就記錄整理了下來,基於C/C++語言 原貼地址:https://helloacm.com/cc-linear-regression-tutorial-using-gradient-descent/ 前言 在機器學習和數據挖掘處理等 ...
  • 1. 概述 自增操作符(++)和自減操作符(--)是對變數進行加1和減1的操作。 2.分類說明 ++和--是對變數進行自增1和自減1的簡寫操作符。許多編程任務中經常需要對變數加1或者減1,所以採用這兩個操作符會方便許多。例如,下麵的代碼是對i自增1,而對j自減1: i++讀為i加加,i--讀為i減減 ...
  • 0.遇到一個問題代碼func GetMap (i interface{})(map[string]interface{}){ if i == nil { //false ??? i = make(map[string]interface) fmt.Println("xxxxx") }}var tes... ...
  • 前言 上一篇四種途徑提高RabbitMQ傳輸消息數據的可靠性(一)已經介紹了兩種方式提高數據可靠性傳輸的方法,本篇針對上一篇中提出的問題(1)與問題(2)提出解決常用的方法。 本文其實也就是結合以上四個方面進行講解的,主要參考《RabbitMQ實戰指南》(有需要PDF電子書的可以評論或者私信我),本 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...