拼接:"+"號(同類型可拼接)

>>>li = [1,2] >>>li + li [1,2,1,2] >>>li*2 [1,2,1,2] >>>li [1,2]
沒有減號“-”,只有拼接"+"和重復"*"
一、字符串拼接
(一)."+"號。據說SQL語句用"+"號會很危險。
(二).%s 格式化字符串,從左到右一一對應。"%s"是占位符,語法:"%s %s %s" % (s1,s2,s3)
(三).join(iterable)。括號中需要一個可迭代類型,有且只有一個參數。元素之間的拼接。
其中," ".join(iterable)遍歷到最后一個元素不會加空格了,因為它是元素之間的拼接,同理於split()
(四).format()。大括號"{}"是占位符,是索引。語法:"{}{}".format(s1,s2)。大括號中默認索引是0,1,(索引可以換位置),索引的是format()小括號中的元素。也需要一一對應,要保證占位符能拿到值。
其中,"{}"里可以指定名稱,通過后面format()小擴內賦值的方式把值給前面的占位符。例:
s1 = "i" s2 = "love" s3 = "python" print("{c} {b} {a}".format(a=s1, b=s2, c=s3)) # 運行結果(相當於反向輸出了) # python love i
補充:format()非常強大,可以這樣玩:
# 語法:{:} print("{:.1f}".format(12.22)) # 12.2 # 同理於"%.1f",只是語法和書寫格式不一樣。 print("{:.2%}".format(0.2222)) # 22.22% # 格式化百分比 print("{:<10}".format(12)) # '12 ' # 輸出占10位。尖尖向左,左對齊 print("{:*^10}".format(10)) # ****10**** # 脫字符"^",居中對齊,並且使用指定的"*"來填充
二、格式化輸出
(一)."%s"格式化字符串
>>>'%15s'%'mkcry' ' mkcry'
默認右對齊,15表示寬度,不足會用空格占位。
減號"-",用作於左對齊
>>>'%-10s'%'mkcry' ' mkcry'
(二)."%d"格式化整數。
>>>"%d" %1.12 '1'
輸出的也是個字符串。變成整數了,直接把小數刪了。
(三)."%f"格式化小數。(m.n):m是寬度,n為小數,m大於格式化的數值的位數時才會顯示。(小數位數默認是6位)
>>>"%6.2f" %1.111 ' 1.11'
寬度6,小數2位。
>>>"%0.62" %1.111 '001.11'
用0來填充。
另外,還有下面這么一個梗:
>>>"%.2f" %1.255 '1.25' #保留2位小數,應該是四舍五入,這里為什么沒有四舍五入? >>>"%.20f" %1.255 '1.25499999999999989342' #保留20位小數就可以看出問題了,是因為浮點型數值,在python3中不精確的問題而造成的
一般實際應用中,小數保留1位來確保精度不丟失。
(四)."%c"格式化ASCII字符
>>>"%c" %65 'A' >>>"%c" %"A" 'A'
字符轉ASCII碼的方案:ord()內置函數
>>>ord("A") 65
(五)."%o"格式化八進制
>>>"%o" %8 '10' >>>"%o" %16 '20'
(六)."%x"格式化十六進制
>>>"%x" %16 '10' >>>"%x" %10 'a' >>>"%x" %15 'f'
(七)."%e"科學計數法格式
1千2百億用科學計數法來表示就很直觀了,不加逗號隔開的情況下看這種長串數字就是受罪。
>>>"%e" %120000000000 '1.200000e+11'
三、深淺復制
針對嵌套了列表才用的,因為列表是可變的。(這個點注意下,不然要陪80個億)
除了copy.deepcopy()之外,其他的都是淺復制。
copy()和分片都是淺復制,只是復制表面,沒法復制嵌套在里面的列表。而深復制是從里到外都復制了。

>>>li1 = [1,2] >>>li2 = ["a",li1] >>>li1 [1,2] >>>li2 ['a',[1,2]] >>>li3 = li2.copy() #這是淺復制 >>>li3 ['a',[1,2]] >>>import copy >>>li4 = copy.deepcopy(li2) #這是深復制 >>>li4 ['a',[1,2]] >>>li1.clear() >>>li1 [] >>>li2 ['a',[]] >>>li3 ['a',[]] >>>li4 ['a',[1,2]]
li2、li3、li4都嵌套了li1。但li2、li3會因為是淺復制的原因,在li1.clear()的時候同步被清除了。
li4因為是深復制,li1是完全獨立的,所以不會受到li1.clear()的影響。
淺復制中列表會跟着變,而深復制不會變。
網上找來一個碾平list的方法,碾完了把這個新的list重新賦值給一個變量。這下再怎么倒騰都沒事了。
b = ["o", "g", "s", "f", 1, 2] a = [1, "a", 2, [3, 4], ["c", ["d", "e", "f"]], [[5, 6], [7, 8]], b] # 碾平list flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] a = flatten(a) print(a) # [1, 'a', 2, 3, 4, 'c', 'd', 'e', 'f', 5, 6, 7, 8, 'o', 'g', 's', 'f', 1, 2]
小練習:
# 1.用4種方法,將列表li = ['I','python','like'],里面的單詞拼成: I**like**python li = ['I', 'python', 'like'] # 1 print(li[0] + "**" + li[2] + "**" + li[1]) # 2 print("%s**%s**%s" % (li[0], li[2], li[1])) # 3 print("**".join([li[0], li[2], li[1]])) # 4 print("{}**{}**{}".format(li[0], li[2], li[1])) print("{0[0]}**{0[2]}**{0[1]}".format(li)) # 索引方式
# 2. a=1.2,分別用3種格式,輸出a: ''' 1.字符串格式, 2.整型格式, 3.浮點型: 輸出占10位、保留2位小數 、帶加號、靠左端 ''' a = 1.2 # 1 print("%s" % a) # 2 print("%d" % a) # 3 print("%+-10.2f" % a)
# 3. print('aa\tbb') 如何輸出,結果為: aa\tbb # print('aa\tbb') print('aa\\tbb') print(r'aa\tbb')