列表,元組和字符串
5.1 列表:一個打了激素的數組
有時候可能需要將一些相互之間有關聯的數據保存在一起,這個就叫數組。Python將其稱為列表。
?
5.1.1 創建列表
>>> [1,2,3,4,5]
[1, 2, 3, 4, 5]
>>>
上面是一個匿名列表,因為沒有名稱,所以創建了也沒使用。
>>> number = [1,2,3,4,5]
>>> type(number)
>>> for each in number:
... print(each)
...
1
2
3
4
5
>>>
type()函數用于返回指定參數的類型,list表示列表
列表可以包含任意類型的數據
>>> mix = [520,"小甲魚",3.14,[1,2,3,4]]
>>> type(mix)
>>>
?
5.1.2 向列表添加元素
append() 方法
>>> number
[1, 2, 3, 4, 5]
>>> number.append(6)
>>> number
[1, 2, 3, 4, 5, 6]
>>>
?這里的append并不是一個BIF,它屬于列表對象的一個方法,中間有個. 暫時可以理解為范圍的意思,append方法屬于一個叫number的列表對象
>>> number.append(7,8)
Traceback (most recent call last):
File "
TypeError: append() takes exactly one argument (2 given)
>>> number.extend(7,8)
Traceback (most recent call last):
File "
TypeError: extend() takes exactly one argument (2 given)
>>> number.extend([7,8])
>>> number
[1, 2, 3, 4, 5, 6, 7, 8]
>>>
可以看到要同時添加多了元素到列表,要用extend方法,事實上,extend方法是使用一個列表來擴充另外一個列表
?
insert 方法支持將元素插入到具體位置
>>> number.insert(0,0)
>>> number
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>>
insert 方法還支持負數
>>> number.insert(-1,8.5)
>>> number
[0, 1, 2, 3, 4, 5, 6, 7, 8.5, 8]
>>>
?
5.1.3 從列表中獲取元素
通過索引可以直接獲取列表中的元素
>>> eggs = ["雞蛋","鴨蛋","鵝蛋","鐵蛋"]
>>> eggs[0]
'雞蛋'
>>> eggs[3]
'鐵蛋'
>>>
訪問列表的最后一個元素:
>>> eggs[-1]
'鐵蛋'
>>> eggs[len(eggs)-1]
'鐵蛋'
>>>
如果要將鴨蛋和鐵蛋的位置調換
>>> eggs
['雞蛋', '鴨蛋', '鵝蛋', '鐵蛋']
>>> temp = eggs[1]
>>> eggs[1] = eggs[3]
>>> eggs[3] = temp
>>> eggs
['雞蛋', '鐵蛋', '鵝蛋', '鴨蛋']
>>>
或者更簡潔的辦法:
>>> eggs
['雞蛋', '鴨蛋', '鵝蛋', '鐵蛋']
>>>
>>> eggs[1], eggs[3] = eggs[3], eggs[1]
>>> eggs
['雞蛋', '鐵蛋', '鵝蛋', '鴨蛋']
>>>
隨機抽取列表里的元素,使用random方法
>>> import random
>>>
>>> eggs
['雞蛋', '鐵蛋', '鵝蛋', '鴨蛋']
>>> prizes = eggs
>>> prizes
['雞蛋', '鐵蛋', '鵝蛋', '鴨蛋']
>>> random.choice(prizes)
'鴨蛋'
>>> random.choice(prizes)
'雞蛋'
>>> random.choice(prizes)
'鵝蛋'
>>>
?
5.1.4 從列表中刪除元素
remove pop del 方法
remove 指定一個待刪除的元素,使用remove 刪除元素,不需要知道元素的具體位置,如果不存在就會報錯
>>> eggs
['雞蛋', '鐵蛋', '鵝蛋', '鴨蛋']
>>> eggs.remove('雞蛋')
>>> eggs
['鐵蛋', '鵝蛋', '鴨蛋']
>>> eggs.remove('雞蛋')
Traceback (most recent call last):
File "
ValueError: list.remove(x): x not in list
>>>
?
pop 方法是將列表中的指定元素彈出來,取出并刪除的意思,參數是一個索引
>>> eggs
['鐵蛋', '鵝蛋', '鴨蛋']
>>> eggs.pop(1)
'鵝蛋'
>>> eggs
['鐵蛋', '鴨蛋']
>>>
pop 方法如果不帶參數,默認刪除列表中的最后一個元素
?
del 是一個Python的語句,不是del方法,刪除元素,刪除列表
>>> eggs
['鐵蛋', '鴨蛋']
>>> del eggs[0]
>>> eggs
['鴨蛋']
>>> del eggs
>>> eggs
Traceback (most recent call last):
File "
NameError: name 'eggs' is not defined
>>>
?
5.1.5 列表切片
?
從列表1中取出三個元素放到列表2中
>>> list1 = ['鋼鐵俠','蜘蛛俠','蝙蝠俠','綠燈俠','神奇女俠']
>>> list2 = [list1[2],list1[3],list1[4]]
>>> list2
['蝙蝠俠', '綠燈俠', '神奇女俠']
>>>
如果是取出200元素,就很尷尬了,這里可是這樣操作
>>> list1
['鋼鐵俠', '蜘蛛俠', '蝙蝠俠', '綠燈俠', '神奇女俠']
>>> list2 = []
>>> for i in range(len(list1)):
... list2.append(list1[i])
...
>>> list2
['鋼鐵俠', '蜘蛛俠', '蝙蝠俠', '綠燈俠', '神奇女俠']
>>>
但是還可以簡化操作,比如出去第二個元素到第五個元素
>>> list1
['鋼鐵俠', '蜘蛛俠', '蝙蝠俠', '綠燈俠', '神奇女俠']
>>> list2 = list1[2:5]
>>> list2
['蝙蝠俠', '綠燈俠', '神奇女俠']
>>>
?
5.1.6 進階玩法
列表切片操作其實還可以接收第三個參數,就是步長,默認值為1,下面將其修改為2
>>> list1 = range(10)
>>> list1
range(0, 10)
>>> list1 = list(range(10))
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list1[0:9:2]
[0, 2, 4, 6, 8]
>>> list1[::2]
[0, 2, 4, 6, 8]
>>>
發現了沒有:?list1[0:9:2]?list1[::2] 可以完成同樣的事情,后者更簡潔
如果將列表的步長設置為-1 ,相當月整個列表反過來了
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list1[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
del 語句作用于列表切片,結果有點意思
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del list1[::2]
>>> list1
[1, 3, 5, 7, 9]
>>>
delete 直接作用于原始列表了
5.1.7 一些常用的操作符
列表比較
>>> list1 = [123]
>>> list2 = [234]
>>> list1 > list2
False
>>> list1 <= list2
True
>>> list3 = ['apple']
>>> list4 = ['pineapple']
>>> list3 < list4
True
>>>
* 重復操作符,
>>> list1 * 3
[123, 123, 123]
>>>
成員關系操作。in not in
>>> list5 = list1 + list2
>>> list5
[123, 234]
>>> 123 in list1
True
>>> 456 in list1
False
>>> 456 not in list1
True
>>>
?
開發過程中,需要取出列表中重復的元素,使用in 和not in 就可以輕松實現
>>> oldlist = ['西班牙','葡萄牙','牙買加','葡萄牙','匈牙利']
>>> newlist = []
>>> for each in oldlist:
... if each not in newlist:
... newlist.append(each)
...
>>> print(newlist)
['西班牙', '葡萄牙', '牙買加', '匈牙利']
>>>
?
5.1.8 列表的小伙伴們
列表有都少個方法,可以使用dir(list)去查看
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
?
count 方法用來統計元素在列表中出現的次數
>>> list1 = list(range(10))
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list1.count(1)
1
>>>
index 方法是返回某個元素在列表中第一次出現的索引值
>>> list1.index(9)
9
>>>
reverse 方法是將整個列表翻轉
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list1.reverse()
>>> list1
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
sort 方法是對列表元素進行排序
>>> list1
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> list1.sort()
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
如果需要從大到小進行排序,很簡單,先調用sort方法,在調用reverse方法即可
其實sort還有第三個參數,語法為:
sort(func,key,reverse)
>>> list1
[1, 2, 55, 123, 8, 5, 6, 7, 111]
>>> list1.sort(reverse=True)
>>> list1
[123, 111, 55, 8, 7, 6, 5, 2, 1]
>>>
?
5.2 元組,戴上了枷鎖的列表
元組與列表最大的區別就是,元組只可讀,不可寫。
>>> tuple1 = (1,2,3,4,5)
>>> tuple1
(1, 2, 3, 4, 5)
>>> type(tuple1)
>>>
復制一個元組:
>>> tuple1
(1, 2, 3, 4, 5)
>>> tuple2 = tuple1[:]
>>> tuple2
(1, 2, 3, 4, 5)
>>>
?
5.2.2 更新和刪除元組
由于元祖中的元素是不允許被修改的,但是并不妨礙我們創建一個新的同名元組
>>> x_men = ('金剛狼','x教授','暴風女','火鳳凰','鐳射眼')
>>> x_men[1] = '小甲魚'
Traceback (most recent call last):
File "
TypeError: 'tuple' object does not support item assignment
>>> x_men = (x_men[0],"小甲魚") + x_men[2:]
>>> x_men
('金剛狼', '小甲魚', '暴風女', '火鳳凰', '鐳射眼')
>>>
?
5.3 字符串
字符串創建,使用單引號,或者雙引號,但是要成對出現
字符串同元組一樣,創建之后就不能修改,只能通過拼接的方式實現
?
?
?
?
?
?
序號 | 方法及描述 |
---|---|
1 |
capitalize()
|
2 |
center(width, fillchar) 返回一個指定的寬度 width 居中的字符串,fillchar 為填充的字符,默認為空格。 |
3 |
count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數 |
4 |
bytes.decode(encoding="utf-8", errors="strict") Python3 中沒有 decode 方法,但我們可以使用 bytes 對象的 decode() 方法來解碼給定的 bytes 對象,這個 bytes 對象可以由 str.encode() 來編碼返回。 |
5 |
encode(encoding='UTF-8',errors='strict') 以 encoding 指定的編碼格式編碼字符串,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace' |
6 |
endswith(suffix, beg=0, end=len(string))
|
7 |
expandtabs(tabsize=8) 把字符串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8 。 |
8 |
find(str, beg=0 end=len(string)) 檢測 str 是否包含在字符串中 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內,如果是返回開始的索引值,否則返回-1 |
9 |
index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在字符串中會報一個異常. |
10 |
isalnum() 如果字符串至少有一個字符并且所有字符都是字母或數字則返回 True,否則返回 False |
11 |
isalpha() 如果字符串至少有一個字符并且所有字符都是字母則返回 True,否則返回 False |
12 |
isdigit() 如果字符串只包含數字則返回 True 否則返回 False.. |
13 |
islower() 如果字符串中包含至少一個區分大小寫的字符,并且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False |
14 |
isnumeric() 如果字符串中只包含數字字符,則返回 True,否則返回 False |
15 |
isspace() 如果字符串中只包含空格,則返回 True,否則返回 False. |
16 |
istitle() 如果字符串是標題化的(見 title())則返回 True,否則返回 False |
17 |
isupper() 如果字符串中包含至少一個區分大小寫的字符,并且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False |
18 |
join(seq) 以指定字符串作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個新的字符串 |
19 |
len(string) 返回字符串長度 |
20 |
ljust(width[, fillchar]) 返回一個原字符串左對齊,并使用 fillchar 填充至長度 width 的新字符串,fillchar 默認為空格。 |
21 |
lower() 轉換字符串中所有大寫字符為小寫. |
22 |
lstrip() 截掉字符串左邊的空格 |
23 |
maketrans() 創建字符映射的轉換表,對于接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。 |
24 |
max(str) 返回字符串 str 中最大的字母。 |
25 |
min(str) 返回字符串 str 中最小的字母。 |
26 |
replace(old, new [, max]) 把 將字符串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次。 |
27 |
rfind(str, beg=0,end=len(string)) 類似于 find()函數,不過是從右邊開始查找. |
28 |
rindex( str, beg=0, end=len(string)) 類似于 index(),不過是從右邊開始. |
29 |
rjust(width,[, fillchar]) 返回一個原字符串右對齊,并使用fillchar(默認空格)填充至長度 width 的新字符串 |
30 |
rstrip() 刪除字符串字符串末尾的空格. |
31 |
split(str="", num=string.count(str)) num=string.count(str))以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num 個子字符串 |
32 |
splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。 |
33 |
startswith(str, beg=0,end=len(string)) 檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內檢查。 |
34 |
strip([chars]) 在字符串上執行 lstrip()和 rstrip() |
35 |
swapcase() 將字符串中大寫轉換為小寫,小寫轉換為大寫 |
36 |
title() 返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle()) |
37 |
translate(table, deletechars="") 根據 str 給出的表(包含 256 個字符)轉換 string 的字符,要過濾掉的字符放到 deletechars 參數中 |
38 |
upper() 轉換字符串中的小寫字母為大寫 |
39 |
zfill (width) 返回長度為 width 的字符串,原字符串右對齊,前面填充0 |
40 |
isdecimal() 檢查字符串是否只包含十進制字符,如果是返回 true,否則返回 false。 |
?casefold 方法用于將字符串中所有的英文大寫轉為小寫
>>> str1 = 'FishC'
>>>
>>> str1.casefold()
'fishc'
>>>
count(sub[,start[,end]])
>>> str2 = "上海自來水來自上海"
>>> str2.count('上')
2
>>> str2.count('上', 0, 5)
1
find(sub[,start[,end]]) #查找第一次出現的位置
>>> str2.find("上")
0
index(sub[,start[,end]]) #查找元素出現的第一位置,找不到拋出異常
>>> str2.index('上')
0
>>> str2.index('我')
Traceback (most recent call last):
File "
ValueError: substring not found
>>> str2.find('我')
-1
>>>
?
replace(old,new[,count]) 將old字符替換為new字符
>>> str4 = 'I love you'
>>> str4.replace("you","fishc.com")
'I love fishc.com'
>>>
split(sep=None,maxsplit=-1) 用于拆分字符串
>>> str5 = "肖申克的救贖/1994年/9.6/美國"
>>> str5.split(sep='/')
['肖申克的救贖', '1994年', '9.6', '美國']
>>>
和split方法相反的是join(interable)方法用于拼接字符串
>>> countries = ['中國','俄羅斯','美國','日本','韓國']
>>> '-'.join(countries)
'中國-俄羅斯-美國-日本-韓國'
>>> ','.join(countries)
'中國,俄羅斯,美國,日本,韓國'
>>> '=='.join(countries)
'中國==俄羅斯==美國==日本==韓國'
>>>
5.3.2 格式化
格式化字符串就是按照統一的規矩去輸出一個字符串。
1. format() 方法接收位置參數和關鍵字參數,二者均傳遞到一個名為replacement的字段,而這個replacement字段在字符串內用大括號 {} 表示。
>>> "{0} love {1}.{2}".format("I","FishC","com")
'I love FishC.com'
>>>
字符串中的{0} {1} {2} 應該與位置有關,依次被format的參數替換,那么format的三個參數就是位置參數
>>> "{a} love {b}.{c}".format(a="I", b="Fishc", c="com")
'I love Fishc.com'
>>>
{a} {b} {c] 就相當于三個目標標簽,format將參數中的值替換進去。
如果將位置參數和關鍵參數綜合放在一起,那么位置參數必須在關鍵參數之前,否則會報錯
>>> "{a} love {b}.{0}".format(a="I", b="Fishc","com")
File "
SyntaxError: positional argument follows keyword argument
>>> "{0}: {1:.2f}".format("圓周率",3.1415026)
'圓周率: 3.14'
>>> >>> "{0}: {1:.2f}".format("圓周率",3.1415026)
?
2. 格式化操作符:%
符號 |
說明 |
%c |
格式化字符及其 ASCII 碼 |
%s |
格式化字符串 |
%d |
格式化整數 |
%o |
格式化無符號八進制數 |
%x |
格式化無符號十六進制數 |
%X |
格式化無符號十六進制數(大寫) |
%f |
格式化浮點數字,可指定小數點后的精度 |
%e |
用科學計數法格式化浮點數 |
%E |
作用同 %e,用科學計數法格式化浮點數 |
%g |
根據值的大小決定使用 %f 或 %e |
%G |
作用同 %g,根據值的大小決定使用 %f 或者 %E |
?
>>> '%c' % 97
'a'
>>> '%c%c%c%c%c' % (70,105,115,104,67)
'FishC'
>>>
?
格式化命令的輔助操作符
符號 |
說明 |
m.n |
m 是顯示的最小總寬度,n 是小數點后的位數 |
- |
用于左對齊 |
+ |
在正數前面顯示加號(+) |
# |
在八進制數前面顯示 '0o',在十六進制數前面顯示 '0x' 或 '0X' |
0 |
顯示的數字前面填充 '0' 取代空格 |
?
>>> '%5.1f' % 27.68
' 27.7'
>>> '%.2e' % 27.68
'2.77e+01'
>>> '%10d' % 5
' 5'
>>> '%-10d' % 5
'5 '
>>> '%010d' % 5
'0000000005'
>>> '%#X' % 100
'0X64'
>>>
?
3. python 轉義字符和含義
轉義字符 | 描述 |
---|---|
\(在行尾時) | 續行符 |
\\ | 反斜杠符號 |
\’ | 單引號 |
\” | 雙引號 |
\a | 響鈴 |
\b | 退格(Backspace) |
\e | 轉義 |
\000 | 空 |
\n | 換行 |
\v | 縱向制表符 |
\t | 橫向制表符 |
\r | 回車 |
\f | 換頁 |
\oyy | 八進制數yy代表的字符,例如:\o12代表換行 |
\xyy | 十進制數yy代表的字符,例如:\x0a代表換行 |
\other | 其它的字符以普通格式輸出 |
5.4 序列
1. list
>>> a = list()
>>> type(a)
>>> a
[]
>>> b = list("fishc")
>>> b
['f', 'i', 's', 'h', 'c']
>>>
2.tuple
tuple() 方法把一個可迭代對象轉換為元組
3.str() 方法用于把object對象轉換為字符串
4.len(sub) 用戶返回sub的長度
5.max返回集合中的最大值
6.min 返回集合中的最小值
7.sum 方法用于返回序列的iterable的所有的總和
>>> tuple1 = 1,2,3,4,5,6
>>> sum(tuple1)
21
>>> sum(tuple1,10)
31
>>>
8.sorted 方法用于返回一個排序的列表
>>> list1 = [1,4,6,3,66,2,8,14]
>>> sorted(list1)
[1, 2, 3, 4, 6, 8, 14, 66]
>>>
9.reverse 方法用于返回一個逆向的序列值
>>> list1 = [1,4,6,3,66,2,8,14]
>>>
>>>
>>> for i in reversed(list1):
... print(i,end=',')
...
14,8,2,66,3,6,4,1,>>>
>>>
10.enumerate生成二元組,每個二元組可有索引和元素組成
>>> str1 = "FishC"
>>> for each in enumerate(str1):
... print(each)
...
(0, 'F')
(1, 'i')
(2, 's')
(3, 'h')
(4, 'C')
>>>
11.zip方法用于返回各個可迭代參數共同組成的元組
>>> list1 = [1,3,5,7,9]
>>> str1 = "FishC"
>>> for each in zip(list1,str1):
... print(each)
...
(1, 'F')
(3, 'i')
(5, 's')
(7, 'h')
(9, 'C')
>>>
完!
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
