print的補充與格式化字符串
print()在help後返回的幫助文件
>>> help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
# ...表示 其他傳入值 value2、value3...
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
#將內容打印的地方默認爲當前窗口 可以在txt等其他允許的文件打印
sep: string inserted between values, default a space.
#set表示value之間的間隔輸入的元素,默認爲空格
>>> print (1,2,3,4,5,sep='!')
>>>1!2!3!4!5
end: string appended after the last value, default a newline.
>>> for i in range(4):
print(i,end='#')
>>> 0#1#2#3#
#end表示在打印完所有value之後再追加打印一個元素,默認爲換行(\n)
flush: whether to forcibly flush the stream.
#是否刷新數據流 Ture後即爲及時顯示(輸入1個字符即顯示)
字符串的格式
- %號格式化
name='Bob'
age=13
print('His name is %s,his age is %d.'%(name,age))
print('His name is ',name,',his age is ',age,',',sep='')
print('His name is '+name+',his age is '+str(age)+',')
結果
His name is Bob,his age is 13.
His name is Bob,his age is 13.
His name is Bob,his age is 13.
- 佔位符
格式 | 描述 |
---|---|
%d | 有符號的整數 |
%s | 字符串 |
%c | 字符及ASCII碼 |
%o | 無符號八進制整數 |
%x(X) | 無符號十六進制整數 |
%e(E) | 浮點數,科學計數(10的多少次冪) |
%f | 浮點數 |
注:如當需要使用%打印’100%'時
print('%d%%'%100) #此時'%%’表示一個%,前面的%表示轉譯字符,用\會報錯
100%
format格式化
1.位置映射
print('name:{},age:{}'.format('tom',18))
結果
name:tom,age:18
2.關鍵字映射
print('name:{},age:{},adress:{address}'.format('tom',18,address='China'))
結果
name:tom,age:18,adress:China #注作爲關鍵字的內容必須放在format最後面
3.對應元素映射
print('第一個:{0[0]},第二個:{0[1]},第三個:{0[2]}'.format(('aaa','bbb','ccc')))
結果
第一個:aaa,第二個:bbb,第三個:ccc
print('第一個:{0[0]},第二個:{1[1]},第三個:{0[2]}'.format(('aaa','bbb','ccc'),('111','222')))
結果
第一個:aaa,第二個:222,第三個:ccc
列表
1.格式:
用[ ]括起來的一組元素,元素之間以’,'間隔
可以存儲多種數據類型
2.特點:
是有序的,元素可以重複,是一個可變類型
3.創建:
-
創建空列表:
l=[ ]
-
創建多元素列表:
l=[1,1,2,3,‘aa’,{ },(1,2),[‘a’,‘b’]]
-
類型強轉:
str1='hello' li=list(str1) print(li,type(li)) 結果 ['h', 'e', 'l', 'l', 'o'] <class 'list'>
4.簡單操作
#####拼接#####
li1=[1,2,3]
li2=[7,7,7]
print(li1+li2)
結果:
>[1, 2, 3, 7, 7, 7]
#####重複#####
li1=[1,2,3]
print(li1*3)
結果
[1, 2, 3, 1, 2, 3, 1, 2, 3]
#####切片#####
>>> li=['a','b','c','d','e','f','g','h']
>>> li[1:5:2] #取指定範圍指定步長
['b', 'd']
>>> li[::-1] #取反
['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
5.常見操作
-
增刪改查
增:append()、extend()、insert()
>>> li1=['name','age']
>>> li2=['city','college']
>>> li1.append(li2)
>>> li1
['name', 'age', ['city', 'college']]
>>> li1.extend(li2) #在一個列表(li1)末尾導入另一個列表(li2) 用li1=li1+li2效果相同
>>> li1
['name', 'age', ['city', 'college'], 'city', 'college']
>>> li1.insert(0,'country') #在指定索引位置插入元素
>>> li1
['country', 'name', 'age', ['city', 'college'], 'city', 'college']
刪:pop() 、clear()、remove()、del
>>> li=[0,1,2,3,4,5,6,7,8,9]
>>> li.pop() #取出最後一個元素返回該值,並在原列表中刪除該值
9
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8] #刪除元素後的列表
>>> li.pop(1) #取出指定索引位置的元素返回該值,並在原列表中刪除該值
1
>>> li
[0, 2, 3, 4, 5, 6, 7, 8] #刪除元素後的列表
>>> li.remove(2) #從左開始刪除第一個指定的元素(只刪除一個)
>>> li
[0, 3, 4, 5, 6, 7, 8] #刪除元素後的列表
>>> li.clear() #將列表所有元素清除,列表將變成一個空列表
>>> li
[]
>>> del li #將列表整個刪除,列表(li)將消失再調用該列表(li)會報錯
>>> li
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
li
NameError: name 'li' is not defined
改:直接根據索引
li=[1,1,1,1,1,1]
>>> li[1]=2 #改指定索引位置的元素
>>> li
[1, 2, 1, 1, 1, 1]
>>> li[2:]=3,4,5,6 #改指定範圍的元素
>>> li
[1, 2, 3, 4, 5, 6]
#注:索引不能超出列表自身範圍,即不能通過索引來爲列表添加新的元素
遍歷:
#####元素遍歷#####
>>> li[2:]=3,4,5,6
>>> li
[1, 2, 3, 4, 5, 6]
>>> li=['a','b','c']
>>> for i in li:
print(i)
a
b
c
#####索引遍歷#####
>>> li=['a','b','c']
>>> for i in range(len(li)):
print(li[i],end=' ')
a b c
#####枚舉遍歷#####
enumerate() #對於的迭代對象,將其組成一個索引序列,利用該序列,得到索引即對應值
li=['a','b','c']
>>> for i ,j in enumerate(li):
print(i,j)
0 a
1 b
2 c
-
計數:count(),查找某元素的次數
-
反轉:reverse(),將整個列表反轉
-
排序:sort(),將列表排序
>>> li=[1,1,2,35,7,1] >>> li.count(1) #統計元素(1)出現的次數 3 >>> li.reverse() #反轉 >>> li [1, 7, 35, 2, 1, 1] >>> li.sort() #排序,升序(必須是同種數據類型) >>> li [1, 1, 1, 2, 7, 35] >>> li.sort(reverse=True) #排序,降序(必須是同種數據類型) >>> li [35, 7, 2, 1, 1, 1]
6列表解析式(生成式)
格式:[表達式 for 迭代元素 in 可迭代對象 (其他條件)]
實現原理:
迭代[可迭代對象]中的每一個元素,每迭代一次的結果賦值給對應的迭代元素,再通過表達式的運算得到一個新的值,最後通過所有表達式計算的值(可以再通過其他條件篩選)以一個列表的形式返回。
li=[x for x in range(10)]
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> li=[x for x in range(10) if x%2==0]
>>> li
[0, 2, 4, 6, 8]
>>> sr='今天是晴天'
>>> li=[ord(x) for x in sr]
>>> li
[20170, 22825, 26159, 26228, 22825]
賦值與拷貝
賦值:對對象的引用
>>> ls=[1,2,3,4]
>>> lf=ls
>>> print(id(ls),id(lf))
60164536 60164536
拷貝:淺拷貝與深拷貝
-
淺拷貝會創建新的對象,內容是對原對象的引用
三種實現方法:
切片操作[:]
工廠函數 list(li)
copy模塊內的copy函數
la=[1,2,3,'a']
#####切片操作[:]#####
lb=la[:]
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
21644752 21645912
True
False
#####copy函數#####
import copy
lb=copy.copy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
56305144 56241928
True
False
#####工廠函數#####
lb=list((la))
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
21972432 23277360
True
False
- 深拷貝
import copy
la=[1,2,3,'a']
lb=copy.deepcopy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
淺拷貝與深拷貝的差別
- 淺拷貝相當於我們只拷貝了一層,修改外層元素,會修改引用,讓它們指向另一個位置;修改嵌套列表的元素,列表地址沒有發生變化,指向的還是同一個位置。
- 深拷貝拷貝對象的所有元素,包括多層嵌套的元素,因此是開闢了一個新的內存存儲區,和數據源沒有關係了
>>>import copy
>>>a = [1, 2, 3, 4, ['a', 'b', 'c']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> id(a)
19276104
>>> id(b)
19276104
>>> id(c)
19113304
>>> id(d)
19286976
>>> a.append(5) #操作1對一層數據操作
>>> a[4].append('hello') #操作2對深層數據操作
>>> a
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> b
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c', 'hello']]
>>> d
[1, 2, 3, 4, ['a', 'b', 'c']]
其他
三目運算符
a=1
b=1
a+=2 if a<2 else b-1
print(a,b)
3 1
列表生成式
(與列表.6相似)
a=[1,2,3]
b=['a','b','c']
li=[[i,j] for i in a for j in b]
print(li)
結果
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]
元組
特點
有序、元素可以重複,不可更改對象。 符號: ( )
創建方法
-
空元組的創建
-
單元素元祖的創建
>>> tu=()
>>> type(tu)
<class 'tuple'>
>>> tu=('a')
>>> type(tu)
<class 'str'>
>>> type(tu)
<class 'str'>
>>> tu=('a',) #單元素元元組創建時必須再加一個','不然會默認是字符串
>>> type(tu)
<class 'tuple'>
- 多元素元祖的創建(可以包含多種數據類型)
tu=(1,2,3) #創建單元素元組
tu2=(4,5,6)
print(tu+tu2) #元組的拼接
print(tu*3) #元組的重複
print(tu[1:],tu[0]) #元組的切片及索引
結果
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 1, 2, 3, 1, 2, 3)
(2, 3) 1
查
切片查、索引查、index()
>>> tp=(1,2,3,4,5,6,'a','b')
>>> tp[2:] #切片查
(3, 4, 5, 6, 'a', 'b')
>>> tp[4] #索引查
5
>>> tp.index('a')
6
>>> del tp #刪除整個列表
>>> tp
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
tp
NameError: name 'tp' is not defined
注:由於元組爲不可變類型,所以不能進行增、刪元素的操作。但是可以將整個元組刪除del。
>>> tp=(1,2,3,4,5,6,'a','b')
>>> del tp #刪除整個列表
>>> tp
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
tp
NameError: name 'tp' is not defined
tu=(1,2,3)
print(id(tu))
del tu
tu=(1,2,3)
print(id(tu)) ###垃圾回收機制,其他類型有相似效果
結果
23988864
23988864
遍歷
元素遍歷
索引遍歷
枚舉遍歷 ennumerate
tup=(1,2,3,4,5,'a')
for i in tup:
print(i,end=' ')
print()
for i in range(len(tup)):
print(tup[i],end=' ')
print()
for i,j in enumerate(tup):
print(i,j,'|',end=' ')
結果
1 2 3 4 5 a
1 2 3 4 5 a
0 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 a |