3-【python13_day2】.md

本節內容

  1. 列表、元組操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作
  6. 字符編碼與轉碼

一,列表操作

示例列表:

names = ['wuzb',"Tenglan",'Eric']

1,下標取值

下標從0開始,第n個值的下標是n-1。
可以倒着取值,比如:name[-1]

>>> names[0]
'wuzb'
>>> names[2]
'Eric'
>>> names[-1]
'Eric'
>>> names[-2] #還可以倒着取
'Tenglan'

2,切片

下標切片,取頭舍尾。比如name[1:8],只會取下標是1-7的值。
如果從頭開始可以不用寫下標: name[:6]
如果想要取到最後一個可以:name[2:]
還可以隔幾個取值:name[2::2]
表示:每隔2個值取一個值,下標從2開始到結束

>>> names = ["Wuzb","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']

3,追加

方法:name.append(“值”)
自動會在列表最後追加

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新來的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']

4,插入

方法:name.insert(2,”alex”)
代表在name中下標爲2的值後面插入一個值爲alex的元素

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
>>> names.insert(2,"強行從Eric前面插入")
>>> names
['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']

5,修改

方法:name[2] =”alex”
直接去賦值

>>> names
['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', '從eric後面插入試試新姿勢', 'Tom', 'Amy', '我是新來的']
>>> names[2] = "該換人了"
>>> names
['Alex', 'Tenglan', '該換人了', 'Eric', 'Rain', '從eric後面插入試試新姿勢', 'Tom', 'Amy', '我是新來的']

6,刪除

方法:name.remove[“alex”] 刪除指定的元素
name.pop() 刪除最後的元素
del name[2] 刪除指定下標的元素

>>> del names[4]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
>>>
>>> names.remove("Eric") #刪除指定元素
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新來的']
>>> names.pop() #刪除列表最後一個值
'我是新來的'
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']

7,擴展

方法: name.extend(b)
擴展列表name,將列表b加入到列表name中。

>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

8,拷貝

方法:names=name.copy()
代表將name列表複製一份給names。
當name改變的時候,name是不會變的

>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> name_copy = names.copy()
>>> name_copy
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> name
[1, 2, 3, 4, 5, 4, 6]
>>> names=name.copy()
>>> names
[1, 2, 3, 4, 5, 4, 6]
>>> name.append(8)
>>> name
[1, 2, 3, 4, 5, 4, 6, 8]
>>> names
[1, 2, 3, 4, 5, 4, 6] #copy之後,name變了,但是names是不會變的

9,統計

方法:name.count(“alex”)

>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.count("Amy")
2

10,排序&反轉

方法:name.sort() 3.0不同的數據類型不能放在一起排序。
反轉 name.reverse()
3.0裏不同數據類型不能放在一起排序了,python2可以。

>>> names=[1,2,3,5,3,6,6,8,95,87]
>>> names.sort()
>>> names
[1, 2, 3, 3, 5, 6, 6, 8, 87, 95]
>>> names.reverse()
>>> names
[95, 87, 8, 6, 6, 5, 3, 3, 2, 1]

11,獲取下標

方法:name.index(”Amy”) #只返回找到的第一個下標

>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
>>> names.index("Amy")

 2 #只返回找到的第一個下標

二,元組操作

元組
元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表。
它只有2個方法,一個是count,一個是index,完畢
方法1:name.count(“alex”)
方法2:name.index(“wzb”)

>>> name=("alex","wzb","liyuan")
>>> name[1]
'wzb'
>>> name[1:]
('wzb', 'liyuan')
>>> name.count("wzb")
1
>>> name.index("wzb")
1

三、字符串操作

3.1 基本字符串的操作(字符串是不可變的,分片賦值是不合法的)

標準的序列操作:索引、分片、乘法、判斷成員資格、求長度、取最大最小值

3.1.1 索引

>>> name="brucewu"
>>> name[4]
'e'
示例:根據給定的年月日,以數字形式打印出日期

月份和日期結尾字典

months =['January','February','March','April','May','June','July','August','September',
         'October','November','December']
​
endings = ['st','nd','rd'] + 17*['th']\
        + ['st','nd','rd'] + 7*['th']\
        + ['st']
​
#輸入年月日
year = input('year:')
month = input('month(1-12):')
day = input('day(1-31:')
​
#月份和日期類型轉換
month_number = int(month)
day_number = int(day)
​
#月和日的取得,使用列表索引
month_name = months[month_number - 1]
ordinal = day + endings[day_number - 1]
year:2017
month(1-12):12
day(1-31:22
December 22nd.2017

3.1.2 分片

>>> tag="http://www.liaoxuefeng.com/"
>>> tag[7:]
'www.liaoxuefeng.com/'
>>> tag[7:-1]
'www.liaoxuefeng.com'
示例:分片示例
url = input("Please input url:")
domain = url[4:-4]
print("Domain name:"+domain)
Please input url:www.python.com
Domain name:python

3.1.3 序列相加(同類型的才能相加)

>>> "hello"+"world"
'helloworld'
>>> "hello"+2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

3.1.4 乘法

>>> name="wu"
>>> names=name*5
>>> names
'wuwuwuwuwu'
>>> []*100
[]

3.1.5 成員資格(in)

>>> url="www.python.org"
>>> "python" in url
True

3.1.6 長度,最大和最小值(len、max、min)

>>> url="www.python.org"
>>> len(url)
14
>>> max(url)
'y'
>>> min(url)
'.'

3.2 字符串的格式化

  1. 格式化操作符的右側數可以是任意類型,如果是元組或者映射類型(如字典)。那麼字符串的格式化將會有所不同。
  2. 如果操作數是元組,其中每個元素都會被單獨格式化,每個值都需要一個對應的轉換說明。
基本的轉換說明符。注意,這些項的順序至關重要。

(1)%字符:轉換說明符開始。
(2)轉換標誌(可選):- 表示左對齊;+表示要在轉換值之前要加正負號;”“(空白字符)表示正數前要保留空格;0 表示轉換值若位數不夠則用0填充。
(3)最小字段寬度(可選):轉換後字符串至少應具有的指定寬度。如果是*,寬度值從元組中讀出。
(4)點(.)後跟精度值(可選):如果是實數,精度指的是出現在小數點後的位數。如果是字符串,該數字表示最大字段寬度。如果是*,精度從元組中讀出。
(5)轉換類型:
格式符爲真實值預留位置,並控制顯示的格式。格式符可以包含有一個類型碼,用以控制顯示的類型,如下:

%s 字符串 (採用str()的顯示)
%r 字符串 (採用repr()的顯示)
%c 單個字符
%b 二進制整數
%d 十進制整數
%i 十進制整數
%o 八進制整數
%x 十六進制整數
%e 指數 (基底寫爲e)
%E 指數 (基底寫爲E)
%f 浮點數
%F 浮點數,與上相同
%g 指數(e)或浮點數 (根據顯示長度)
%G 指數(E)或浮點數 (根據顯示長度)
%% 字符”%”

3.2.1 簡單轉換

>>> "price of eggs:$%+d" %42
'price of eggs:$+42'
>>> "price of eggs:$%.5f" %42.98979797
'price of eggs:$42.98980'
寬度按設置爲10
>>> from math import pi
>>> "%10.5f" % pi
'   3.14159'

3.2.2使用對齊和0填充

>>> "%-10.5f" % pi
'3.14159   '
>>> "%+10.5f " % pi
'  +3.14159 '
>>> "%+10.5f " % -pi
'  -3.14159 '

3.3 字符串的方法

3.3.1 查找字串:Find

返回字串所在位置最左端的索引,沒有找到返回-1

url = "www.python.com"
print(url.find("www"))
print(url.find("python"))
print(url.find("sb"))
#長度超出也返回-1
print(url.find("www.python.comss"))
-----------------------------------
0
4
-1
-1

3.3.2 連接序列中元素:join(split的逆向方法)

注意:連接元素必須是字符串
seq = ["1","2","3","4","5",]
sep = "+"
result = sep.join(seq)
print(result)
----------------------------
1+2+3+4+5

3.3.3 轉換小寫:lower

使用場景:匹配字符串的時候區分大小寫,如果想做到簡潔,可以把字符串全部轉換爲小寫來匹配

url = "WWW.Python.Com"
url_low = url.lower()
print(url_low.find("python"))
-------------------------------
4

3.3.4 替換:replace(查找並且替換)

說明:返回某字符串所有匹配項均被替換的結果

url = "WWW.Python.Com"
print(url.replace("Python","python"))
--------------------------------------
WWW.python.Com

3.3.5 分割字符串:split

說明:將字符串分割成序列

seq = "1+2+3+4+5"
print(seq.split('+'))、
-----------------------
['1', '2', '3', '4', '5']
特別說明:不提供分割符號,默認使用空格
url = "WWW Python Com"
print(url.split())
----------------------
['WWW', 'Python', 'Com']

3.3.6 去兩側空格:strip

說明:不包括內部

url = "    WWW Python Com    "
print(url.strip())
----------------------
WWW Python Com
指定要去除的兩側符號:
url = "    !!!///****WWW &&//*Python Com  *!/  "
print(url.strip(' !*/'))
------------------------------
WWW &&//*Python Com

3.3.7 其他重要方法

name.capitalize()  首字母大寫
name.casefold()   大寫全部變小寫
name.center(50,"-")  輸出 '---------------------Alex Li----------------------'
name.count('lex') 統計 lex出現次數
name.encode()  將字符串編碼成bytes格式
name.endswith("Li")  判斷字符串是否以 Li結尾
name.startswith("Li")
name.isdigit("5") #判斷是否爲數字
name.isnumeric  
name.isprintable
name.isspace
name.istitle
name.isupper
name="bruce wu"
if name.startswith("bruce"):
    print("yes")
else:
    print("no")
---------------------
yes

3.3.8 替換:replace,translate,maketrans

replace: 查找並且替換所有
maketrans: 創建一個替換表
translate: 使用替換表批量處理字符串
intab = "aeiou"  #This is the string having actual characters.
outtab = "12345" #This is the string having corresponding mapping character
trantab = str.maketrans(intab, outtab)
str = "this is string example....wow!!!"
print(str.translate(trantab))
---------------------------------
th3s 3s str3ng 2x1mpl2....w4w!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章