Python 字符串拼接、格式化輸出、深淺復制


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

>>>li = [1,2]
>>>li + li
[1,2,1,2]
>>>li*2
[1,2,1,2]
>>>li
[1,2]
View Code

沒有減號“-”,只有拼接"+"和重復"*"

 

一、字符串拼接

(一)."+"號。據說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]]
View Code

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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM