一、Python的基礎知識:
*基礎知識: ROM是只讀內存先嬉,用于存儲操作系統(tǒng)轧苫,存進去以后只能讀取不能修改;RAM是隨機內存疫蔓。一般寬帶帶寬Mb的b是bit位含懊,而音視頻內容的大小是單位Mb的b是bytes,字節(jié)衅胀。蘋果手機的三層架構:硬件層+操作系統(tǒng)層+軟件層岔乔;安卓手機的四層架構:硬件層+linux操作系統(tǒng)層+java虛擬機+軟件層;機器語言——匯編語言——中級語言(C語言)——高級語言
—— 關于Python的常識:
????* Python的發(fā)音與拼寫
????* Python的作者是Guido van Rossum(龜叔)
????* Python正式誕生于1991年
????* Python的解釋器如今有多個語言實現(xiàn)滚躯,我們常用的是CPython(官方版本的C語言實現(xiàn))雏门,其他還有Jython(可以運行在Java平臺)、IronPython(可以運行在.NET和Mono平臺)掸掏、PyPy(Python實現(xiàn)的茁影,支持JIT即時編譯)
????* Python目前有兩個版本,Python2和Python3丧凤,最新版分別為2.7.13和3.6.2
????* Life is shot, you need Python. 人生苦短呼胚,我用Python。
—— Python的優(yōu)缺點
????優(yōu)點:
????簡單息裸,免費開源蝇更,可移植性,解釋性語言(Javascript和Python都是呼盆,其他的C是編譯型語言)年扩,面向對象,萬事萬物皆對象(相對的是面向過程访圃,只有C語言是面向過程的),可擴展性(只要有人寫這個擴展程序,就能完成這個功能)囚巴,豐富的庫(一般庫就是框架驻粟,但小而精的庫,大而全是框架批糟,寫程序的一個模板)格了,規(guī)范的代碼(采用強制縮進使其有很強的可讀性)
????缺點:
????唯一的缺點就是執(zhí)行效率慢,這個是解釋型語言所通有的徽鼎,同時這個缺點也將被計算機越來越強大的性能所彌補盛末。
—— Python的應用場景
????Web自動化,移動端自動化否淤,Web應用開發(fā)悄但,操作系統(tǒng)管理、服務器運維的自動化腳本石抡,網(wǎng)絡爬蟲檐嚣,科學計算(人工智能,自動駕駛)啰扛,桌面軟件嚎京,服務器軟件(網(wǎng)絡軟件),游戲(游戲多是C++和Lua配合來寫侠讯,Python可以寫一些輔助的功能)挖藏,構思實現(xiàn),產(chǎn)品早期原型和迭代
????*前臺:前端(html厢漩,瀏覽器)膜眠,ios,Android做出的產(chǎn)品溜嗜;后臺:php宵膨,python,java炸宵,.net后臺語言辟躏;IDE的意思是集成開發(fā)環(huán)境;Django和Flask都是Python的框架土全,程序員會用這些框架寫程序捎琐,測試時就是測這些框架会涎;Pycharm要運行一個項目,需要有一個interpreter瑞凑,python解析器末秃,把代碼解析成為機器認識的語言。
二籽御、Python的正式學習:
1练慕、注釋:
注釋的寫法:
? ? - 單行注釋:只能注釋一行;'# ' 號后面的內容都會被注釋掉技掏;快捷鍵:? ctrl + /? ? 取消的快捷鍵:? ctrl? +? /铃将;注釋內容是什么都可以,隨意寫
? ? - 多行注釋:可以同時注釋多行? ? (用單行注釋也可以實現(xiàn));多行注釋寫法:? ? ''' 注釋內容'''? ? 或者? """注釋內容"""哑梳;多行注釋沒有快捷鍵
注釋的作用:能夠大大增強程序的可讀性劲阎;能夠使用注釋進行代碼測試;能夠幫助我們快速理解別人寫的代碼與邏輯
補充: python程序中的中文支持:
- python3.x解析器中涧衙,是默認支持中文的哪工,但是在python2.x解析器中就需要一定的額外設置才可以
- 如果需要在python2.x的解析器中使用中文,需要在每個.py文件的最前端寫上如下代碼:
? ```python
? # coding=utf-8
? ```
? 否則會報錯.
- 另外,python官方建議最好的書寫形式為:
? ```python
? # -*- coding:utf-8 -*-
? ```
?當然,這兩種都是可行的.作用一樣.
2、變量
python中,在程序運行時,可以隨著程序的運行更改的量成為變量弧哎。簡單理解: 變量就是用來臨時存儲數(shù)據(jù)的容器雁比。
使用變量的好處:提高人效,定義一處,多處使用; 提高開發(fā)效率撤嫩;敏捷開發(fā)(短周期的開發(fā))偎捎;測試自動化
3、變量的類型
程序中,為了更充分的利用內存空間以及更有效率的管理內存序攘,變量是有不同的類型的茴她。
int (有符號整形), float (浮點數(shù)程奠,包括負小數(shù)和正小數(shù))丈牢,bool (布爾),str (字符串) —— 全寫: string
(Long瞄沙,長整形己沛,也可以代表八進制和十六進制;Complex距境,復數(shù)型申尼;List,列表垫桂;Truple师幕,元祖;Dictionary诬滩,字典)
# str(字符串)類型定義的形式: 或者‘字符串的內容’
name = "這里是字符串的內容"# int(有符號整數(shù))類型定義的形式:
age = 10
# float(浮點數(shù))類型定義的形式:
# 在java中有double(雙精度)霹粥,float是單精度灭将,python中沒有double
height = 100.00
# bool(布爾)類型定義的形式: Ture的T要大寫,F(xiàn)alse的F要大寫
is_man = True
python自動管理數(shù)據(jù)類型:? 在python中后控,只要定義了一個變量宗侦,而且它有數(shù)據(jù),那么它的類型就已經(jīng)確定了忆蚀,不需要咱們開發(fā)者主動的去說明它的類型,系統(tǒng)會自動辨別姑裂。我們可以使用 type(變量的名字或者數(shù)值) 來查看變量的類型:
is_man = True
print(type(is_man))
?# 得到的結果為:
?# <class 'bool'>
4馋袜、標識符
關鍵字,變量名以及我們后面會學習到的函數(shù)名,類名,模塊名等都是標識符.
?標識符有一個大的規(guī)則: 由字母舶斧、下劃線和數(shù)字組成欣鳖,且數(shù)字不能開頭;標識符區(qū)分大小寫?
?標識符有不同的命名形式: 但規(guī)則是見名知意?
駝峰命名法
* 小駝峰式命名法(lower camel case): 第一個單詞以小寫字母開始茴厉;第二個單詞的首字母大寫泽台,例如:myName、aDog* 大駝峰式命名法(upper camel case): 每一個單字的首字母都采用大寫字母矾缓,例如:FirstName怀酷、LastName
?* 還有一種命名法是用下劃線“_”來連接所有的單詞: 比如: send_func
?關鍵字是Python官方規(guī)定的一些標識符,我們盡量不要定義成相同的名字,免得出錯。
查看關鍵字: python
?# 導入模塊
import keyword# 查看這個python版本的關鍵字
?print(keyword.kwlist)python3.x中的關鍵字有:?
?> and as assert break class continue def del
?> elif else except exec finally for from global
?> if in import is lambda not or pass
?> print raise return try while with yield
?也可以在Python Shell(shift+鼠標右鍵)通過以下命令進行查看當前系統(tǒng)中python的關鍵字? ? import keyword
? keyword.kwlist?
5嗜闻、輸出
格式化輸出:指通過print()等函數(shù)向指定的地方(比如屏幕)輸出指定格式的內容
#一般格式化輸出:一個等號叫賦值蜕依,兩個等號才是等于
name = "xiaohua"?
age+=1
print("我的姓名是%s, 年齡是%d" % (name, age))# 默認情況下 Python使用%f 會保留小數(shù)點后面六位?
print("我的身高:%.2f" % my_height)?# 如果想打印一個bool值,如果想顯示True,或者False 要使用%s?
# 如果想顯示1 或者 0 要使用%d?
# 是否是男性 False?
print("是否是男性:%s" % is_man)?
# 是否是男性:0?
print("是否是男性:%d" % is_man)??#換行輸出:在輸出的時候,如果有`\n`那么琉雳,此時`\n`后的內容會在另外一行顯示
#換行符:\n
# 一行顯示1234567890样眠,另外一行顯示-------?
print("1234567890\n-------")# 單純一個\ 需要書寫兩個\\??
# 如果我就是想顯示你好\n世界?
print("你好\\n世界")# 單純一個% 需要書寫兩個%%??
num = 98?
# 成活率達到了98%?
print("成活率達到了%d%%" % num)#制表符:\t,tab==四個空格
#輸出是hello? ? world
print("hello\tworld")下面是完整的翠肘,它可以與%符號使用列表:?
| 格式符號 | 轉換 |?
| ---- | :------------: |?
| %c | 字符 |?
| %s | 字符串 |?
| %d | 有符號十進制整數(shù) |?
| %u | 無符號十進制整數(shù) |?
| %o | 八進制整數(shù) |?
| %x | 十六進制整數(shù)(小寫字母0x) |?
| %X | 十六進制整數(shù)(大寫字母0X) |?
| %f | 浮點數(shù) |?
| %e | 科學計數(shù)法(小寫'e') |?
| %E | 科學計數(shù)法(大寫“E”) |
| %g | %f和%e 的簡寫 |
| %G | %f和%E的簡寫 |
6檐束、輸入:
python2.x 和 python3.x 輸入的區(qū)別:
- python2.x :raw_input() ;input()
- python3.x: input()
- python2.x(raw_input) python3.x(input) :無論你輸入的是什么類型的值,輸出的都是字符串類型(這里我們主要用Python3.x)
# 如果想通過打印完成多個變量的輸出 格式:
# print(變量名1,變量名2,變量名3...)
print(my_name,my_age)# 姓名: 小明 年齡: 22歲
print("姓名:% 年齡:%s歲" %(my_name,my_age))
- python2.x(input):你輸入的是什么類型的值,輸出的就是什么類型的
7束倍、運算符
? ? - 算術運算符:
| 運算符 | 描述 | 實例 |
| ---- | ---- | ---------------------------------------------------------------------------------------------?|
| +? ? | 加? ? | 兩個對象相加 a + b 輸出結果 30?-------------------------------------------------|
| -? ? | 減? ? | 得到負數(shù)或是一個數(shù)減去另一個數(shù) a - b 輸出結果 -10-----------------------|
| *? ? | 乘? ? | 兩個數(shù)相乘或是返回一個被重復若干次的字符串 a * b 輸出結果 200--- |
| /? ? | 除? ? | b / a 輸出結果 2-----------------------------------------------------------------------?|
| //? | 取整除? | 返回商的整數(shù)部分 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0-------------?|
| %? ? | 取余? | 返回除法的余數(shù) b % a被丧,b=20,a=10肌幽, 輸出結果 0----------------------|
| **? | 指數(shù)? | a**b 為10的20次方晚碾, 輸出結果 100000000000000000000?--------------|
注意:混合運算時,優(yōu)先級順序為: `**` 高于 `*` `/` `%` `//` 高于 `+` `-` 喂急,為了避免歧義格嘁,建議使用 `()` 來處理運算符優(yōu)先級。
并且廊移,不同類型的數(shù)字在進行混合運算時糕簿,整數(shù)將會轉換成浮點數(shù)進行運算探入。
? ? - 賦值運算符:
-- 賦值運算符:
| 運算符 | 描述 | 實例 |
| ---- | ----- | ----------------------------------------------------------------------------------------------------------|
| =| 賦值運算符 | 把 = 號右邊的結果 賦給 左邊的變量,如 num=1 + 2 * 3懂诗,結果num的值為7|? ??? ?-- 復合賦值運算符:可以少創(chuàng)建變量蜂嗽,少占用內存
| 運算符 | 描述 | 實例 |
| ------ | ---------------- | --------------------------------------|
| +=? ? | 加法賦值運算符? | c += a 等效于 c = c + a--|
| -=? ? | 減法賦值運算符? | c -= a 等效于 c = c - a-----|
| *=? ? | 乘法賦值運算符? | c *= a 等效于 c = c * a-----|
| /=? ? | 除法賦值運算符? | c /= a 等效于 c = c / a------|
| %=? ? | 取模賦值運算符? | c %= a 等效于 c = c % a-|
| **=? ? | 冪賦值運算符? ? | c **= a 等效于 c = c **a----|
| //=? ? | 取整除賦值運算符 | c //= a 等效于 c = c // a--|
8、數(shù)據(jù)類型轉換:
| 函數(shù) | 說明 |
| ---------------------- | ----------------------------- |
| int(x [,base ]) | 將x轉換為一個整數(shù) |
| float(x ) | 將x轉換為一個浮點數(shù) |
| complex(real [,imag ]) | 創(chuàng)建一個復數(shù)殃恒,real為實部植旧,imag為虛部 |
| str(x ) | 將對象 x 轉換為字符串 |
| repr(x ) | 將對象 x 轉換為表達式字符串 |
| eval(str ) | 用來計算在字符串中的有效Python表達式,并返回一個對象 |
| tuple(s ) | 將序列 s 轉換為一個元組 |
| list(s ) | 將序列 s 轉換為一個列表 |
| chr(x ) | 將一個整數(shù)轉換為一個Unicode字符 |
| ord(x ) | 將一個字符轉換為它的ASCII整數(shù)值 |
| hex(x ) | 將一個整數(shù)轉換為一個十六進制字符串 |
| oct(x ) | 將一個整數(shù)轉換為一個八進制字符串 |
| bin(x ) | 將一個整數(shù)轉換為一個二進制字符串 |# 了解
# eval會自動幫我們識別去掉""以后的內容是否是python里面常見的類型,
# 如果是离唐,轉換成對應的類型病附,常用來轉換int和float
my_str3 = "2323"
ret = eval(my_str3)
print(type(ret))
print(ret)
?# eval往往會配合input使用
result = eval(input("請輸入一個數(shù)字:"))
print(type(result))
print(result)# bool不參與轉換
三、順序結構
指的是代碼按照從上往下的流程,依次順序執(zhí)行.
四亥鬓、分支結構(選擇結構)
1、if判斷語句
格式:
if 要判斷的條件:
????條件成立時嵌戈,要做的事情
????...# 例子:定義一個變量flag 如果flag為True,代表沒有危險品,可以進入
flag = True
# 判斷
if flag:
? ? print("您沒有攜帶危險品,可以進入火車站!!!")
- 如果某些條件滿足,才能做某件事情;條件不滿足時昔逗,則不能做鉴扫,這就是所謂的判斷。
- 不僅生活中有宋渔,在軟件開發(fā)中"判斷"功能也經(jīng)常會用到
- 能夠看得出if判斷語句的作用:就是當滿足一定條件時才會執(zhí)行代碼塊語句费什,否則就不執(zhí)行代碼塊語句
- 代碼的縮進為一個tab鍵,或者4個空格
2巡球、比較(即關系)運算符
?python中的比較運算符如下表
?| 運算符 | 描述 | 示例 |
| ---- | -------------------------------- | ------------------------- |
| == | 檢查兩個操作數(shù)的值是否相等言沐,如果是則條件變?yōu)檎妗? | 如a=3,b=3,則(a == b) 為 True |
| != | 檢查兩個操作數(shù)的值是否相等酣栈,如果值不相等险胰,則條件變?yōu)檎妗? | 如a=1,b=3,則(a != b) 為 True |
| > | 檢查左操作數(shù)的值是否大于右操作數(shù)的值矿筝,如果是起便,則條件成立。 | 如a=7,b=3,則(a > b) 為 True |
| < | 檢查左操作數(shù)的值是否小于右操作數(shù)的值缨睡,如果是鸟悴,則條件成立。 | 如a=7,b=3奖年,則(a < b) 為 False |
| >= | 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值细诸,如果是,則條件成立陋守。 | 如a=3,b=3震贵,則(a >= b) 為 True |
| <= | 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是水评,則條件成立猩系。 | 如a=3,b=3,則(a <= b) 為 True |
3中燥、邏輯運算符
| 運算符 | 邏輯表達式 | 描述 | 實例 |
| ---- | ------- | ---------------------------------------- | ------------------------------------ |
| and | x and y | 布爾"與":如果 x 為 False寇甸,x and y 返回 False,否則它返回 y 的值疗涉。 | True and False拿霉, 返回 False。 |
| or | x or y | 布爾"或":如果 x 是 True咱扣,它返回 True绽淘,否則它返回 y 的值。 | False or True闹伪, 返回 True沪铭。 |
| not | not x | 布爾"非":如果 x 為 True,返回 False 偏瓤。如果 x 為 False杀怠,它返回 True。 | not True 返回 False, not False 返回 True |#例子:
is_man = False
if not is_man:
????print("是女性")
4厅克、if-else
# 書寫格式
if 條件:
????滿足條件時要做的事情1
????滿足條件時要做的事情2
????滿足條件時要做的事情3
? ? ...(省略)...
else:
????不滿足條件時要做的事情1????
????不滿足條件時要做的事情2
????不滿足條件時要做的事情3
????...(省略)...is_man = not True
if is_man:
? ? print("是女的")
else:
? ? print("是男的")
5驮肉、elif
if xxx1:
????事情1
elif xxx2:
????事情2
elif xxx3:
????事情3
else:
? ? 事情4說明:
- 當xxx1滿足時,執(zhí)行事情1已骇,然后整個if結束
- 當xxx1不滿足時离钝,那么判斷xxx2,如果xxx2滿足褪储,則執(zhí)行事情2卵渴,然后整個if結束
- 當xxx1不滿足時,xxx2也不滿足鲤竹,如果xxx3滿足浪读,則執(zhí)行事情3昔榴,然后整個if結束
- 可以與else一起使用
- elif必須和if一起使用,否則出錯
- else 一般用在最后碘橘,即所有條件都不滿足時使用
- elif是else if的縮寫,但是python里面不支持else if的寫法, 故 只能用elif.
- if 語句 和 elif 語句 以及 else語句都是互斥的,只有一種情況能夠執(zhí)行,不可能同時執(zhí)行多個
- 整體句式就是 要么...... 要么........ 要么...... 要么..... .........
6互订、if嵌套
if 條件1:
????滿足條件1 做的事情1
????滿足條件1 做的事情2
????...
????if 條件2:
????????滿足條件2 做的事情1
????????滿足條件2 做的事情2
????????...說明
?- 外層的if判斷,也可以是if-else
- 內層的if判斷痘拆,也可以是if-else
- 根據(jù)實際開發(fā)的情況仰禽,進行選擇例子:
chePiao = 1 # 用1代表有車票,0代表沒有車票
daoLength = 9 # 刀子的長度纺蛆,單位為cm
if chePiao == 1:
????print("有車票吐葵,可以進站")
????if daoLength < 10:
????????print("通過安檢")
????????print("終于可以見到Ta了,美滋滋~~~")
????else:
????????print("沒有通過安檢")
????????print("刀子的長度超過規(guī)定桥氏,等待警察處理...")
else:
????print("沒有車票温峭,不能進站")
????print("親愛的,那就下次見了")
用if語句寫猜拳游戲:
# 導入模塊 ---> 隨機模塊
import random# 定義一個變量 記錄用戶(玩家)的輸入(拳法):
player = int(input("請輸入:剪刀(0) 石頭(1) 布(2):"))# 定義一個變量 記錄電腦的輸入
computer = random.randint(0,2)? #0,1,2?# 以玩家為第一視角:
# 假如說玩家勝利(剪刀 = 布 或者 石頭 = 剪刀 或者 布 = 石頭)
# 假如說玩家和電腦平局(玩家輸入的 == 電腦輸入的)
# 假如說玩家失敗(除了勝利和平局 其他都是失敗)?# 玩家勝利
if (player == 0 and computer == 2) or (player == 1 and computer == 0) or (player == 2 and computer == 1):
????print("玩家勝利")
elif (player == computer):
????print("玩家和電腦達成平局")
else:
????print("玩家失敗")
五字支、循環(huán)結構
1凤藏、while循環(huán)
i = 0
while i < 5:
????print("當前是第%d次執(zhí)行循環(huán)" % (i + 1))
????print("i=%d" % i)
????i+=1# 寫while循環(huán)的時候一定要注意:
# 定義一個變量, 切記要對變量進行加1 或者 減1 (等等)操作
# 否則會形成死循環(huán)
* while和if的用法基本類似,區(qū)別在于: ?
if 條件成立堕伪,則執(zhí)行一次清笨; ? while 條件成立,則重復執(zhí)行刃跛,直到條件不成立為止。?
* 一般情況下苛萎,需要**多次重復**執(zhí)行的代碼桨昙,都可以用循環(huán)的方式來完成?
* 循環(huán)不是必須要使用的,但是為了提高代碼的重復使用率腌歉,所以有經(jīng)驗的開發(fā)者都會采用循環(huán)?
* 不可以停止的循環(huán)(判斷條件一直滿足) 稱之為死循環(huán), 在開發(fā)中我們應該盡量防止死循環(huán),因為死循環(huán)太浪費設備性能.?
?* while循環(huán)內部的代碼需要進行縮進,python對縮進要求非常嚴格.
2蛙酪、while循環(huán)嵌套:實際寫代碼時,不要嵌套超過3次
* while循環(huán)嵌套: 外面的循環(huán)執(zhí)行一次,內部循環(huán)會執(zhí)行n次,一直到執(zhí)行完畢,再執(zhí)行外部的循環(huán).
* 無論是內部的while循環(huán)還是外部的while循壞都需要定義一個變量,? 作為循環(huán)次數(shù)的記錄
* 內部while和外部while都需要對變量進行累加操作.? 以保證循環(huán)次數(shù)的減少
例子1:打忧谈恰:
*
* *
* * *
* * * *
* * * * *# 定義一個變量 記錄行數(shù)
row = 1
while row <= 5:# 定義一個變量 記錄列數(shù)
????col = 1
????while col <= row:
????????print("*", end="")
????????col += 1# 在默認的情況下 使用print 默認打印完成后 會有一個換行
# print("哈哈") 完整的格式 print("哈哈", end="\n")
#?換行
????print("")
????row += 1
例子2:打庸鹑:
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*row = 1
while row <= 9:
????if row <= 5:
????????col = 1
????????while col <= row:
????????????print("*", end="")
????????????col += 1
????????print("")
????else:
????????col = 9
????????while col >= row:
????????????print("*", end="")
????????????col -= 1
????????print("")
????row += 1
例子3:九九乘法表
# 定義一個變量 記錄行數(shù)
# %2d 顯示兩位 如果只有一位 使用空格站位 默認為右對齊
# 如果左對齊 就是 %-2d
x = 1
while x <= 9:
????y = 1
????while y <= x:
????????print("%d * %d =%2d\t" %(y,x,y*x),end="")
????????y += 1
????# 換行
????print()
? ? x += 1
3、for循環(huán)
在Python中 for循環(huán)可以遍歷任何序列的項目馍驯,如一個列表或者一個字符串等阁危。
```
for 臨時變量 in 列表或者字符串等可迭代對象:
????????循環(huán)滿足條件時執(zhí)行的代碼
```例子:
name = 'itheima'
for x in name:
?????print(x)for循環(huán)后面可以跟隨一個else.構成for......else句式: (也可以不要else,具體看需求)
```
for 臨時變量 in 列表或者字符串等可迭代對象:
????????將會執(zhí)行的語句
else:
????????for循環(huán)執(zhí)行完畢之后,會執(zhí)行調用的語句
```
總結:
* for循環(huán)中的"臨時變量" 的作用范圍僅僅是當前for循環(huán)體中縮進的區(qū)域?
* for循環(huán)判斷的條件依然是 for 后面的條件是否為True,為True則可以進入,否則不允許進入循環(huán)體.?
* for循環(huán)中的in是個關鍵字 寫for循環(huán)的時候不能夠去掉in
補充知識:
python中 range() 函數(shù)用法:
函數(shù)語法: range(start, stop[, step])
參數(shù)說明:
- start: 計數(shù)從 start 開始。默認是從 0 開始汰瘫。例如range(5)等價于range(0狂打, 5);
- stop: 計數(shù)到 stop 結束,但不包括 stop混弥。例如:range(0趴乡, 5) 是[0, 1, 2, 3, 4]沒有5
- step:步長,默認為1。例如:range(0晾捏, 5) 等價于 range(0, 5, 1)
4蒿涎、break 和 continue
1) break
break能夠打破循環(huán)(這里的循環(huán)指的是一切循環(huán)(例如: for循環(huán)和while循環(huán))),break的作用:立刻結束break所在的整個循環(huán)
for循環(huán)中調用break:如果執(zhí)行了break for循環(huán)將終止 break后面的也就不再執(zhí)行 (直接跳出循環(huán))
name = 'itheima'
for x in name:
? ??print('----')
? ??if x == 'e':
? ??????break
? ??print(x)
else:
? ??print("==for循環(huán)過程中,如果沒有執(zhí)行break退出惦辛,則執(zhí)行本語句==")運行結果:?
----
i
----
t
----
h
----
while循環(huán)中調用break:如果執(zhí)行了break while循環(huán)將終止 break后面的也就不再執(zhí)行 (直接跳出循環(huán))
i = 0
while i<5:
????i = i+1
????print('----')
????if i==3:
????????break
????print(i)
else:
????print("==while循環(huán)過程中劳秋,如果沒有執(zhí)行break退出,則執(zhí)行本語句==")運行結果:
----
1
----
2
----
2) continue
continue的作用:用來結束**本次**循環(huán)裙品,緊接著執(zhí)行下一次的循環(huán)
for循環(huán)中使用continue:如果在for中 如果執(zhí)行了continue 將提前結束本次循環(huán) continue后面的代碼將不再執(zhí)行
name = 'itheima'
for x in name:
????print('----')
????if x == 'e':
????????continue
????print(x)
else:
????print("==for循環(huán)過程中俗批,如果沒有break則執(zhí)行==")運行結果:
----
i
----
t
----
h
----
----
i
----
m
----
a
==for循環(huán)過程中,如果沒有break則執(zhí)行==
while循環(huán)中使用continue :如果執(zhí)行了continue 將提前結束本次循環(huán) continue后面的代碼將不再執(zhí)行
i = 0
while i<5:
????i = i+1
????print('----')
????if i==3:
????????continue
????print(i)運行結果:
----
1
----
2
----
----
4
----
5
總結:
- break/continue只能用在循環(huán)中市怎,除此以外不能單獨使用
- break/continue在嵌套循環(huán)中岁忘,只對最近的一層循環(huán)起作用
- continue是結束單次循環(huán),break是結束整個循環(huán),注意對比記憶
六、字符串
1区匠、字符串的介紹
—? 什么是字符串:它是編程語言中表示文本的數(shù)據(jù)類型干像。字符串就是 有序的字符序列.(順序是不可以改變的)
— python中字符串的定義方式:
Python中字符串的定義:
*? 雙引號定義形式? ? ? ? ? ? ? ? ? 例如:? a? =? "hello? python"
*? 單引號定義形式? ? ? ? ? ? ? ? ? ? 例如:? b? =? '你好中國,? 你好Python'
兩者定義出來的字符串是完全相同的.? 使用哪種形式都可以
— 字符串輸出:在程序中我們可以通過print()方法輸出字符串
—? 字符串輸入:之前在學習input的時候,通過它能夠完成從鍵盤獲取數(shù)據(jù)驰弄,然后保存到指定的變量中麻汰;注意:input獲取的數(shù)據(jù),都以字符串的方式進行保存戚篙,即使輸入的是數(shù)字五鲫,那么也是以字符串方式保存
# 定義一個空的字符串 '' 或者 "" 或者 str()
# 空字符串 代表的就是 字符串中沒有一個字符,空字符串長度為0
# python中提供了一個len函數(shù)(內置函數(shù)) 計算字符串中的字符個數(shù)
# 保留其文本格式 可以使用三引號(" 或者 ')
my_str ='''哈嘍你好你好你好你好你好你好
你好世界世界世界世界
世界世界世界世界世界
哈嘍你好你好你好你好你好你好
你好世界世界世界世界
世界世界世界世界世界'''
print(len(my_str))
總結:
* 字符串就是一組字符的有序集合.
* 字符串有三種表現(xiàn)形式:? 用 ' ' 或者 " "? 包裹? ,? 也可以用多行注釋的形式表示? 變量名 =? '''字符串內容'''? 或者? 變量名 =? """字符串內容"""
* 想要查看字符串的類型, 我們可以調用方法? type(字符串變量名)?
* 想要獲取字符串的長度,? 我們可以使用 len(字符串變量名) 來查看
* 字符串可以是我們平時說的話語,也可以是某一類描述, 任何內內容都可以充當字符串內容.
2岔擂、字符串的下標和切片
1)下標:所謂`“下標”`位喂,就是編號.
如果想取出部分字符,那么可以通過`下標`的方法乱灵,(注意python中下標從 0 開始)?
一定要保證字符串的下標索引是存在的
**小結:**
* 無論是字符串中還是別的(我們即將會講到的列表和元組),? 下標索引值都是從0開始的
* 下標索引值類似于當前位置的坐標.? 或者是編號
* 以字符串舉例:? 這里所標識的是**字符串**中每個**字符**的位置編號
* 下標索引值可以從左側算起? 也可以從右側算起:
? ????* 從左側算起:? 0,? 1,? 2,? 3,? 4.......
????? * 從右側算起:? -1,? -2,? -3,? -4.......
2) 切片
切片是指截取某一對象其中一部分的操作塑崖。? (**字符串、列表痛倚、元組**都支持切片操作规婆。)
切片的語法:[起始:結束:步長]
* 切片是半開半閉區(qū)間? ? 即:? 包含起始位置, 但是不包含結束位置? 數(shù)學表示:? [起始: 結束)
# 切片的語法:[起始:結束(開區(qū)間):步長],步長不寫默認是1
# 字符串是不可變的(復制版的)
a = "abcdef"# 'abc' -> a[0:3] 或者 a[:3] 或者a[-6:-3]
# 如果是從頭部開始 0可以省略
ret1 = a[:3]
print(ret1)# 驗證字符串是不可變的
print(a)# 'ace' a[:5:2] 或者 a[0:5:2] 或者 a[::2]
#默認步長是1
ret2 = a[::2]
print(ret2)# 'bd'
ret3 = a[1:4:2]
print(ret3)?# 'fdb' 或者a[-1::-2]
ret4 = a[::-2]
print(ret4)# 'fd' 或者a[:-5:-2]
ret5 = a[-1:-4:-2]
print(ret5)
總結:
* 我們可以從字符串中獲取相對應的字符,使用切片的方式,也可以使用下標索引的方式.
* 使用切片的方式獲取比較方便,可以根據(jù)公司的需求來進行
* 字符串無論怎樣切片,修改的都不是原來的字符串,而是復制出來的新字符串
* 字符串切片需要遵循的格式:? 字符串名稱 [ 起始 : 結束 : 步長 ]? 其中結束的索引值不包含
* 字符串切片可以從左側也可以從右側進行.? 相對應的索引值不同:
? ????* 從左側進行:? 索引值為:0,? 1,? 2,? 3,? 4.....
? ????* 從右側進行:? 索引值為:-1, -2, -3, -4.....
* 從右側進行切片的時候,需要注意步長也為**負數(shù)**,否則仍然是從左側進行.
3蝉稳、字符串的常見操作:
1) find
> Python find() 方法檢測字符串中是否包含子字符串 str 抒蚜,如果指定 beg(開始) 和 end(結束) 范圍,則檢查是否包含在指定范圍內耘戚,如果包含子字符串返回開始的索引值削锰,否則返回-1。
find()方法語法:str.find(str, beg=0, end=len(string))
> sub:? ? 要查找的**小字符串**
> start:? beg -- 開始索引毕莱,默認為0器贩。
> end:? ? end -- 結束索引颅夺,默認為字符串的長度。(左開右閉)
例如:
mystr = "hello world itcast and itcastcpp"
mystr.find("itcast")
結果:
12
2) index
> Python index() 方法檢測字符串中是否包含子字符串 str 蛹稍,如果指定 beg(開始) 和 end(結束) 范圍吧黄,則檢查是否包含在指定范圍內,該方法與 python find()方法一樣唆姐,只不過如果str不在 string中會報一個異常拗慨。
index()方法語法:str.index(str, beg=0, end=len(string))
> str :? ? 指定檢索的字符串
> beg:? 開始索引,默認為0奉芦。
> end:? 結束索引赵抢,默認為字符串的長度。(左開右閉)
例如:
mystr = 'hello world itcast and itcastcpp'
mystr.find('itcast', 0, 10)
mystr.index('itcast', 0, 10)
結果:
-1
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: substring not found
3) count
> Python count() 方法用于統(tǒng)計字符串里某個字符出現(xiàn)的次數(shù)声功》橙矗可選參數(shù)為在字符串搜索的開始與結束位置
count()方法語法:str.count(sub, start= 0,end=len(string))
> sub:? 搜索的子字符串
> start:? 字符串開始搜索的位置。默認為第一個字符,第一個字符索引值為0先巴。
> end:? 字符串中結束搜索的位置其爵。字符中第一個字符的索引為 0。默認為字符串的最后一個位置伸蚯。
例如:
mystr = 'hello world itcast and itcastcpp'
mystr.count("itcast")
結果:
2
4) replace
> Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串)摩渺,如果指定第三個參數(shù)max,則替換不超過 max 次剂邮。
replace()方法語法:str.replace(old, new[, max])
> old --? 將被替換的子字符串摇幻。
> new -- 新字符串,用于替換old子字符串挥萌。
> max -- 可選字符串, 替換不超過 max 次
name = 'hello world ha ha'
name.replace("ha", "Ha")
name.replace("ha", "Ha", 1)
結果:
'hello world Ha Ha'
'hello world Ha ha'
5) split
> Python split()通過指定分隔符對字符串進行切片绰姻,如果參數(shù)num 有指定值,則僅分隔 num 個子字符串
split()方法語法:str.split(str="", num=string.count(str)).
> str --? ? 分隔符瑞眼,默認為所有的空字符,包括空格棵逊、換行(\n)伤疙、制表符(\t)等。
> num -- 分割次數(shù)辆影。
name = 'hello world ha ha'
name.split(" ")
name.split(" ", 2)
name.split("l")結果:
['hello', 'world', 'ha', 'ha']
['hello', 'world', 'ha ha']
['he','','0 wor','d ha ha'] —— ''這里面有這個空字符串
6) capitalize
> Python capitalize()將字符串的第一個字母變成大寫,其他字母變小寫徒像。對于 8 位字節(jié)編碼需要根據(jù)本地環(huán)境。
capitalize()方法語法:str.capitalize()
例如:
mystr = 'hello world itcast And Itcastcpp'
print(mystr.capitalize())
結果:
'Hello world itcast and itcastcpp'
7) title
> Python title() 方法返回"標題化"的字符串,就是說所有單詞都是以大寫開始蛙讥,其余字母均為小寫(見 istitle())锯蛀。
title()方法語法:str.title();
例如:
a = "hello itcast and itcastCPP"
a.title()
結果:
'Hello Itcast And Itcastcpp'
8) startswith
> Python startswith() 方法用于檢查字符串是否是以指定子字符串開頭,如果是則返回 True次慢,否則返回 False旁涤。如果參數(shù) beg 和 end 指定值翔曲,則在指定范圍內檢查。
startswith()方法語法:str.startswith(str, beg=0,end=len(string));
> str -- 檢測的字符串劈愚。
> strbeg -- 可選參數(shù)用于設置字符串檢測的起始位置瞳遍。
> strend -- 可選參數(shù)用于設置字符串檢測的結束位置。
例如:
mystr = 'hello world itcast and itcastcpp'
mystr.startswith("hello")
mystr.startswith("Hello")
結果:
True
False
9) endswith
> Python endswith() 方法用于判斷字符串是否以指定后綴結尾菌羽,如果以指定后綴結尾返回True掠械,否則返回False∽⒆妫可選參數(shù)"start"與"end"為檢索字符串的開始與結束位置猾蒂。
endswith()方法語法:str.endswith(suffix[, start[, end]])
> suffix -- 該參數(shù)可以是一個字符串或者是一個元素。
> start -- 字符串中的開始位置是晨。
> end -- 字符中結束位置肚菠。
例如:
mystr = 'hello world itcast and itcastcpp'
mystr.endswith('cpp')
mystr.endswith('app')
結果:
True
False
10) lower
> Python lower() 方法轉換字符串中所有大寫字符為小寫。
lower()方法語法:str.lower()
例如:
mystr = 'HELLO World itcast and itcastcpp'
mystr.lower()
結果:
'hello world itcast and itcastcpp'
11) upper
> Python upper() 方法將字符串中的小寫字母轉為大寫字母署鸡。
upper()方法語法:str.upper()
例如:
mystr = 'HELLO World itcast and itcastcpp'
mystr.upper()
結果:
'HELLO WORLD ITCAST AND ITCASTCPP'
12) ljust
> Python ljust() 方法返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串案糙。如果指定的長度小于原字符串的長度則返回原字符串。
ljust()方法語法:str.ljust(width[, fillchar])
> width -- 指定字符串長度靴庆。
> fillchar -- 填充字符时捌,默認為空格。
例如:
mystr = 'hello'
ret = mystr.ljust(10,'*')
print(ret)
結果:
'hello*****'
13)? rjust
> Python rjust() 返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串炉抒。如果指定的長度小于字符串的長度則返回原字符串奢讨。
rjust()方法語法:str.rjust(width[, fillchar])
> * width -- 指定填充指定字符后中字符串的總長度.
> - fillchar -- 填充的字符,默認為空格
例如:
mystr = "hello"
ret = mystr.rjust(10, '*')
print(ret)
結果:
*****hello
14)? center
> Python center() 返回一個原字符串居中,并使用空格填充至長度 width 的新字符串焰薄。默認填充字符為空格拿诸。
center()方法語法:str.center(width[, fillchar])
> - width -- 字符串的總寬度。
> - fillchar -- 填充字符塞茅。
例如:
mystr = 'hello world itcast and itcastcpp'
ret = mystr.center(50,'@')
print(ret)
結果:
@@@@@@@@@hello world itcast and itcastcpp@@@@@@@@@
15) lstrip
> Python lstrip() 方法用于截掉字符串左邊的空格或指定字符亩码。
lstrip()方法語法:str.lstrip([chars])
> - chars --指定截取的字符。
例如:
str = "? ? this is string example....wow!!!? ? ";
print str.lstrip(); #如果是lstrip(' t')或者lstrip('t ')都可以刪除前面的空格和t野瘦,
#但是如果是lstrip('t')描沟,則不能刪除前面的空格和t,因為原字符串不是t開頭str = "88888888this is string example....wow!!!8888888";
print str.lstrip('8');
結果:
this is string example....wow!!!
this is string example....wow!!!8888888
16)? rstrip
> Python rstrip() 刪除 string 字符串末尾的指定字符(默認為空格).
rstrip()方法語法:str.rstrip([chars])
> - chars -- 指定刪除的字符(默認為空格)
例如:
mystr = '? ? hello? ? '
ret = mystr.rstrip()
print(ret)
結果:
'? ? hello'
17)? strip
> Python strip() 方法用于移除字符串頭尾指定的字符(默認為空格)鞭光。
strip()方法語法:str.strip([chars]);
> - chars -- 移除字符串頭尾指定的字符吏廉。
例如:
a = '\n\t itcast \t\n'
ret = a.strip()
print(ret)
結果:
'itcast'
18) rfind
> Python rfind() 返回字符串最后一次出現(xiàn)的位置(從右向左查詢),如果沒有匹配項則返回-1惰许。
rfind()方法語法:str.rfind(str, beg=0 end=len(string))
> - str -- 查找的字符串
> - beg -- 開始查找的位置席覆,默認為 0
> - end -- 結束查找位置,默認為字符串的長度汹买。
例如:
mystr = 'hello world itcast and itcastcpp' #查詢時從右往左查佩伤,但位置是按左往右算的
ret = mystr.rfind("itcast")
print(ret)
結果:
23
19)? rindex
> Python rindex() 返回子字符串 str 在字符串中最后出現(xiàn)的位置聊倔,如果沒有匹配的字符串會報異常,你可以指定可選參數(shù)[beg:end]設置查找的區(qū)間畦戒。
rindex()方法語法:str.rindex(str, beg=0 end=len(string))
> - str -- 查找的字符串
> - beg -- 開始查找的位置方库,默認為0
> - end -- 結束查找位置,默認為字符串的長度障斋。
例如:
mystr = 'hello world itcast and itcastcpp'
ret1 = mystr.rindex('it')
print(ret1)
ret2 = mystr.rindex("IT")
print(ret2)
結果:
23
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: substring not found
20)? partition
> partition() 方法用來根據(jù)指定的分隔符將字符串進行分割纵潦。
> 如果字符串包含指定的分隔符,則返回一個3元的元組垃环,第一個為分隔符左邊的子串邀层,第二個為分隔符本身,第三個為分隔符右邊的子串遂庄。
> partition() 方法是在2.5版中新增的寥院。
partition()方法語法:str.partition(str)
> str : 指定的分隔符。
例如:
mystr = 'hello world itcast and itcastcpp'
ret = mystr.partition('itcast')
print(ret)
結果:
('hello world', 'itcast', ' and itcastcpp')
21)? rpartition
> 類似于 partition()函數(shù),不過是從右邊開始.
rpartition()方法語法:str.partition(str)
> str : 指定的分隔符涛目。
例如:
mystr = 'hello world itcast and itcastcpp'
ret1 = mystr.partition('itcast')
print(ret1)
ret2 = mystr.rpartition('itcast')
print(ret2)
結果:
('hello world', 'itcast', ' and itcastcpp')
('hello world itcast and ', 'itcast', 'cpp')
22)? splitlines
> Python splitlines() 按照行('\r', '\r\n', \n')分隔秸谢,返回一個包含各行作為元素的列表,如果參數(shù) keepends 為 False霹肝,不包含換行符估蹄,如果為 True,則保留換行符。
splitlines()方法語法:str.splitlines([keepends])
> - keepends -- 在輸出結果里是否去掉換行符('\r', '\r\n', \n'),默認為 False瞧捌,不包含換行符,如果為 True垮兑,則保留換行符。
例如:
mystr = 'hello\nworld'
print(mystr)
ret = mystr.splitlines()
print(ret)
結果:
hello
world
['hello', 'world']
23)? isalpha
> Python isalpha() 方法檢測字符串是否只由字母組成漱挎。
isalpha()方法語法:str.isalpha()
例如:
mystr = 'abc'
ret1 = mystr.isalpha()
print(ret1)
mystr1 = '123'
ret2 = mystr.isalpha()
print(ret2)
mystr2 = 'abc 123'
ret3 = mystr2.isalpha()
print(ret3)
結果:
True
False
False
24)? ? isdigit
> Python isdigit() 方法檢測字符串是否只由數(shù)字組成系枪。
isdigit()方法語法:str.isdigit()
例如:
mystr1 = 'abc'
ret1 = mystr1.isdigit()
print(ret1)
mystr2 = '123'
ret2 = mystr2.isdigit()
print(ret2)
mystr3 = 'abc123'
ret3 = mystr3.isdigit()
print(ret3)
結果:
False
True
False
25)? isalnum
> Python isalnum() 方法檢測字符串是否由字母和數(shù)字組成。
isalnum()方法語法:str.isalnum()
例如:
mystr1 = '123'
ret1 = mystr.isalnum()
print(ret1)
mystr2 = 'abc'
ret2 = mystr2.isalnum()
print(ret2)
mystr3 = 'abc123'
ret3 = mystr3.isalnum()
print(ret3)
mystr4 = 'abc 123'
ret4 = mystr4.isalnum()
print(ret4)
結果:
True
True
True
False
26)? isspace
> Python isspace() 方法檢測字符串是否只由空格組成磕谅。
isspace()方法語法:str.isspace()
例如:
mystr = 'abc123'
ret = mystr.isspace()
print(ret)
mystr1 = ''
ret1 = mystr1.isspace()
print(ret1)
mystr2 = '? '
ret2 = mystr2.isspace()
print(ret2)
mystr3 = '? ? '
ret3 = mystr3.isspace()
print(ret3)
結果:
False
False
True
True
27)? join
> Python join() 方法用于將序列中的元素以指定的字符連接生成一個新的字符串
join()方法語法:str.join(sequence) 是字符串.join()
> - sequence -- 要連接的元素序列私爷。
例如:
str = ' '
li = ['my', 'name', 'is', 'meiZong']
ret = str.join(li)
print(ret)
str1 = '_'
ret1 = str1.join(li)
print(ret1)
結果:
'my name is meiZong'
'my_name_is_meiZong'
補充知識:
# 內置函數(shù)help:對字符串不了解 不知道他有什么特點 有哪些方法,或者對他的方法不熟悉
????my_str = "hello"
????print(type(my_str))
# 查找
????help(str.lower)
# 如果查看一個類的所有方法怜庸,首先要確定他的類型 -> type(數(shù)值) <class "類型">当犯,help(類型)垢村,如果查看這個類型的指定的方法割疾,help(類型.方法名)
總結:
* 字符串是 Python 中最常用的數(shù)據(jù)類型。我們可以使用引號('或")來創(chuàng)建字符串嘉栓。
* 創(chuàng)建字符串很簡單宏榕,只要為變量分配一個值即可拓诸。例如:var1 = 'Hello World!'
* Python不支持單字符類型,單字符在 Python 中也是作為一個字符串使用麻昼。
* Python訪問子字符串奠支,可以使用方括號來截取字符串
* 你可以對已存在的字符串進行修改,并賦值給另一個變量,? 字符串不支持修改.
* Python 支持格式化字符串的輸出 抚芦。盡管這樣可能會用到非常復雜的表達式倍谜,但最基本的用法是將一個值插入到一個有字符串格式符 %s 的字符串中。
* python三引號允許一個字符串跨多行叉抡,字符串中可以包含換行符尔崔、制表符以及其他特殊字符。
? 三引號的語法是一對連續(xù)的單引號或者雙引號(通常都是成對的用)褥民。
七季春、列表
1、列表的介紹:
列表: 和變量一樣,列表也是一個容器,該容器能夠存儲多種數(shù)據(jù)類型.
# 格式: 列表名 = [元素1, 元素2, 元素3,....]
my_list = ["xiaoming", "xiaohong"]
# # -> 支持下標索引
my_name = my_list[0]
print(my_name)
# 需求 我想打印hello (從左到右) 0, 1, 2,....
# 也可以從右到左 -1, -2, -3, ....
ret1 = my_list[-2]
print(ret1)
# 定義一個空列表
# my_list = []? 或者 list()
# my_list = list()
# # 打印下元素個數(shù)
l = len(my_list)
print(l)
# 可以定義空的列表 只要是列表那么就應該有[]
# 也支持下標索引獲取元素
# 保存數(shù)據(jù)的元素 可以是任意類型
總結:
* 列表就是一個容器, 它能夠容納各種數(shù)據(jù)類型, 表現(xiàn)形式是用 [] 包裹
* 列表中的元素可以重復,? 并且是有順序排列的, 我們可以通過下標索引的形式獲取.
? ????* 這里說的下標索引有從左向右的: 0, 1, 2, 3....
? ????* 和從右往左的: -1, -2, -3, -4.....
* 我們定義空列表可以通過 []? 或者是? list()的形式來定義.
* 獲取列表中元素長度
2. 列表的循環(huán)遍歷
> 了更有效率的輸出列表的每個數(shù)據(jù)消返,可以使用循環(huán)來完成
1)? 使用for循環(huán)
namesList = ['xiaoWang', 123, 2323.23,? True, False]
for name in namesList:
? ? print(name)
結果:
xiaoWang
123
2323.23
True
False
2) 使用while循環(huán)
namesList = ['xiaoWang', 123, 2323.23,? True, False]
length = len(namesList)
i = 0
while i<length:
? ? print(namesList[i])
? ? i+=1
結果:
xiaoWang
123
2323.23
True
False
3. 列表的相關操作
> 列表中存放的數(shù)據(jù)是可以進行修改的载弄,比如"增"、"刪"撵颊、"改""
1)? 添加元素:append, extend, insert宇攻,列表可變,字符串不可變
> append() 方法用于在列表末尾添加新的對象秦驯。
append()方法語法:list.append(obj)
>? extend() 函數(shù)用于在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)尺碰。
extend()方法語法:list.extend(seq)
>? insert() 函數(shù)用于將指定對象插入列表的指定位置。
insert()方法語法:list.insert(index, obj)
> - index -- 對象 obj 需要插入的索引位置译隘。
> - obj -- 要插入列表中的對象亲桥。
# append:只要是python中的對象,都可以插入
my_list = ['12','23',23, 34]
my_list.append(2323)
print(my_list)
my_list.append(True)
print(my_list)
my_list.append("2323")
print(my_list)
my_list.append("12")
print(my_list)
my_list.append(3.134)
print(my_list)
my_list.append([23,'2323'])
print(my_list)
# extend:添加一個可以遍歷的對象
my_list.extend([3,2,4,5,2])
print(my_list)
my_list.extend('hahhaha') # 列表中加入了h,a固耘,h题篷,h,a厅目,h番枚,a
print(my_list)
# my_list.extend(2323)? # extend添加的對象需要可以遍歷,這樣寫是錯誤的
# print(my_list)? ?
# my_list.extend(True)? # extend添加的對象需要可以遍歷,這樣寫是錯誤的
# print(my_list)
my_list.extend("2323")
print(my_list)
my_list.extend("12")
print(my_list)
# my_list.extend(3.134)? # extend添加的對象需要可以遍歷,這樣寫是錯誤的
# print(my_list)
my_list.extend([23,'2323'])
print(my_list)
# insert 插入到制定位置
my_list1 = []
my_list1.insert(0,'hello')
print(my_list1)
總結
* append和extend給列表添加元素都是從列表的尾部添加, insert是在指定位置添加.
* append 添加的元素不限制類型,? 任意對象都可以使用append加入列表
* extend加入列表的元素有限制:? 只有能夠遍歷的對象才可以, 并且添加到列表的元素是對象遍歷之后的每一小部分.
* 目前我們所學的能夠遍歷的對象只有:? 字符串和列表? (后期還會有元組 和 字典)
* 列表加入元素的方式可以根據(jù)需求隨意選擇
2) 修改元素
> 修改元素的時候,要通過下標來確定要修改的是哪個元素损敷,然后才能進行修改
# 定義一個列表
my_list = ['ab',23, 2.23]
# 獲取
value = my_list[1]
print(value)
# 把獲取的數(shù)據(jù)進行修改
my_list[1] = "22222"
print(my_list)
my_list[-1] = 223
print(my_list)
總結:
* 修改元素只需要遵循如下順序:? 先獲取, 后修改
* 在列表中獲取元素只需要根據(jù)下標索引值拿取.
* 修改時,? 那剛剛拿取的元素重新賦值即可.
* 列表是可變的, 所以里面的元素也是可以修改的.
3) 查找元素
>? 所謂的查找葫笼,就是看看指定的元素是否存在:in,not? in? 拗馒,index路星,count
> python中查找的常用方法為:
- in(存在),如果存在那么結果為true,否則為false
- not in(不存在)诱桂,如果不存在那么結果為true洋丐,否則false
> in的方法只要會用了呈昔,那么not in也是同樣的用法,只不過not in判斷的是不存在
# 查找元素(in, not in, index, count)
# 定義一個列表, 判斷老李是否在列表中
str = '老李'
my_list = ['老李', '老張', '小明', 300, 300]
if str in my_list:
? ? print('存在在列表中')
# 使用not in 判斷一個元素不再列表中
if "小紅" not in my_list:
? ? print("小紅不再列表中")
# index 通過index 獲取某個元素在列表中的下表索引
ret1 = my_list.index(300)
print(ret1)
# count查找某個元素的值在列表中出現(xiàn)的次數(shù)
ret2 = my_list.count(300)
print(ret2)
# 查詢4000 如果有給出下標索引值 如果沒有 什么也不做
# count配合index實現(xiàn):
count = my_list.count(300)
if count > 0:
? ? index = my_list.index(300)
? ? print(index)
# 使用in配合完成
if 300 in my_list:
? ? index = my_list.index(300)
? ? print(index)
總結:
* 查找元素一般使用 in? 或者 not? in? 或者 index? ? count結合
* in? 或者? not in? 我們搭配 if 語句來實現(xiàn)
* 如果單獨使用 index 有崩潰的風險(index沒有查找到元素的情況下,會崩潰)
* 要想使用index, 需要先判斷元素在列表中的count值, 只有元素的個數(shù)大于等于1個, 代表列表中有此元素, 才可以用index進行下標值的獲取, 這樣比較安全, 排除了崩潰的可能.
* 我們這里不可以使用find 或者 rfind ,? 因為 find 和 rfind 是字符串常用的方法,我們這里說的是列表.
4) 刪除元素
列表元素的常用刪除方法有:
- del:根據(jù)下標進行刪除, 也可以刪除掉整個列表對象,提前釋放內存
- pop:刪除最后一個元素,? 也可以刪除單個指定元素? 把刪除的元素返回回來
- remove:根據(jù)元素的值進行刪除? 如果要刪除的元素值不在列表,會崩潰
- clear: 清空這個列表? ? 把列表中的元素刪除干凈,但是列表還在
# 定義一個列表
my_list = ["小明", 20, "小紅", 32]
# del 刪除指定的元素(通過下標索引)
# 格式: del 列表名[下標索引]
# del 這個函數(shù) 是python內置函數(shù)
del my_list[1:2]
print(my_list)
# del 第二種用法 ----> 了解 del my_list[:] 是不會報錯的友绝,del my_list會報錯
# 提前殺死對象 提前釋放內存堤尾,print(my_list)會報錯,my_list整個不存在了
del my_list
-----------------------------------------------------------
# pop是屬于列表的方法
# pop 默認情況下 會從列表的后面開始刪除
# .pop() 會有一個返回值 告知刪除元素的值
print(my_list.pop())
print(my_list)
# pop(下標索引)
ret1 = my_list.pop(0)
print(ret1)
print(my_list)
-----------------------------------------------------------
# remove通過對象(數(shù)值)來刪除列表中的元素迁客,如果沒有這樣的元素郭宝,就會返回一個錯誤。
# 所以在remove之前掷漱,最好先count一下剩蟀,看remove的元素是否在list里面my_list.remove('小紅')
print(my_list)
-------------------------------------------------------------
# clear 清空列表(列表中的所有元素全部刪除),移除列表中的所有項切威,等于del a[:]
my_list.clear()
print(my_list)
# clear() 等價于:? my_list = [] 或者 my_list = list()
4育特、列表的排序
sort:對列表中的元素進行排序。
sort()方法語法:list.sort([func])
> - func -- 可選參數(shù), 如果指定了該參數(shù)會使用該參數(shù)的方法進行排序先朦。
> - reverse:倒排列表中的元素缰冤。
# 排序, 默認是升序排列
my_list.sort()
# 降序排列
my_list.sort(reverse=True) 或者 my_list.reverse()
# python3.x中排序只支持數(shù)字類型
5、列表的嵌套
一個列表中的元素又是一個列表喳魏,那么這就是列表的嵌套棉浸。
# 需求: 一個學校 有三個辦公室 現(xiàn)在有8為老師等待工位的分配
import? random
# 定義一個學校
school = [[],[],[]]
# 定義一個變量保存8位老師,讓8位老師站好等待隨機分配辦公室
my_str = 'ABCDEFGH'
for c in my_str:
? ? # 產(chǎn)生隨機數(shù)
? ? index = random.randint(0,2)
? ? school[index].append(c)
print(school)
# 獲取元素和修改元素:school[1][1] = 'F' # 這時候school中的元素已經(jīng)修改了
6刺彩、求列表的最大最小值(冒泡排序)
my_list = [-1,-2,-3,-63,-20,-203]
# 定義一個變量,記錄最大值
max = my_list[0]
for value in my_list:
? ? if value > max:
? ? ? ? max = value
print(max)
# 定義一個變量 記錄最小值
min = my_list[0]
for value in my_list:
? ? if value < min:
? ? ? ? min = value
print(min)