np合并 python_这15个tips,带你领略 Python 的简洁和优雅
本文通過15個具體的例子,帶你領略 Python 的簡潔和優雅。
下文中'P'即表示'Pythonic',很 Python 的寫法,'NP'也就是相反,不是很'Pythonic'的寫法。
1、為多個變量賦值
### NP:
a = 2
b = 5
c = 12
### P:
a,b,c = 2,5,12
2、變量值互換
a = 50
b = 25
### NP:
temp = a
a = b
b = temp
### P:
a,b = b,a
上面的例子通過了元組的pack和unpack完成了對a,b的互換,避免了使用臨時變量temp,而且只用了一行代碼。
3、鏈式比較
a = 50
b = 25
### NP:
0<= b and b<=a and a<100
### P:
0 <= b <= a < 100
后者的寫法更接近數學表達式。
4、any/all函數
any和 all是 Python的內置函數。對于 any函數,可迭代參數的任何一個元素為真就返回 True,否則返回 False。對于 all函數,如果可迭代參數的所有元素為真(或迭代器為空),返回 True,否則返回 False。
### NP:
xyz = [4641951.185 ? 1393053.923 ? 4133281.067]
for v in xyz:
? ?if 0.0==v:
? ? ? ?return False
return True
### P:
return all(xyz)
5、用in代替or簡化判斷
同樣是多重判斷問題,判斷某個變量是否為多個可能取值之一
### NP:
if 'green'==s0 or 'red'==s0 or 'blue'==s0:
? ?return True
else:
? ?return False
### P:
return s0 in ('green', 'red', 'blue')
6、if/else 三目運算
### NP:
if age > 18:
? ?ss = 'adult'
else:
? ?ss = 'child'
### P:
ss = 'adult' if age > 18 else 'child'
后者的寫法簡單易懂,僅需一行代碼就完成了常規寫法4行代碼的功能。
7、字符串列表的連接
lst_str = ["Python", "is", "a", "good", "language"] ?
### NP1:
ss = ''
for s0 in lst_str:
? ?ss += s0 + ' '
### NP2:
ss = '%s %s %s %s %s'%(lst_str[0], lst_str[1], lst_str[2], lst_str[3], lst_str[4])
### P:
ss = ' '.join(lst_str)
使用 join方法可以指定間隔字符(串)將字符串列表合并成一個字符串。
8、匹配字符串開頭/結尾
fname1 = 'python.jpg'
fname2 = 'folwer.bmp'
fname3 = 'readme.txt'
### P:
fname1.startswith('python') ? ? ? ? ? #True
fname2.endswith('.jpg') ? ? ? ? ? ? ? ?#False
fname2.endswith(('.jpg', '.bmp')) ? ? #True
fname3.endswith(('.jpg', '.bmp')) ? ? ?#False
9、列表推導式
從列表中找出符合條件的元素組成新的列表
lst0 = [11, 22, 24, 87, 70]
### NP:
lst1 = []
for v in lst0:
? ?if v>30:
? ? ? ?lst1.append(v)
### P:
lst1 = [ v for v in lst0 if v>30 ]
可以結合上面兩條tips,可以實現快速找出文件夾下指定類型的文件,例如:
picfiles = [nm for nm in os.listdir(mydir) if nm.endswith( ('.jpg', '.bmp', '.tiff', '.gif', '.png') ) ]
10、使用zip同步處理多個列表
當想要對多個列表對應的元素進行操作時
income = [201, 198, 195, 210, 199]
cost_rent = [80, 83, 77, 81, 80]
cost_food = [47, 64, 53, 51, 79]
balance = []
### NP:
nlen = len(income)
for i in range(nlen):
? ?balance.append(income[i] - cost_rent[i] - cost_food[i])
### P:
for i0, cr, cf in zip(income, cost_rent, cost_food):
? ?balance.append(i0 - cr - cf)
zip(a,b) 會生成一個可返回元組 (x,y) 的迭代器,其中x來自a,y來自b。一旦其中某個序列到底結尾,迭代宣告結束。因此迭代長度跟參數中最短序列長度一致。
11、列表去重
### NP:
lst_new = []
for v in lst_old:
? ?if not v in lst_new:
? ? ? ?lst_new.append(v)
### P:
lst_new = list(set(lst_old))
12、文件打開與關閉/上下文管理
### NP:
fp = open('result.txt', 'w')
try:
? ?fp.write('just for fun!')
except IOError:
? ?print('something error')
finally:
? ?fp.close()
### P:
with open('result.txt', 'w') as fp:
? ?fp.write('just for fun!')
with 關鍵字實現了上下文管理器,是一種更簡潔也更安全的操作方法。上例中當離開 with 代碼塊的時候,系統會自動調用 fp.close() 方法關閉文件, 哪怕中間遇到異常,close 方法也會被調用。
13、Enumerate
枚舉函數,用于枚舉可迭代對象,并且同時返回元素的下標索引值。
如果你想在迭代一個序列的同時,得到被處理元素的索引下標。內置的 enumerate() 函數可以很好的解決這個問題:
array = ['Stone', 'Tom', 'Jobs', 'Jack']
### NP:
narr = len(array)
for i in range(narr):
? ?print (i, array[i])
### P:
for i, a0 in enumerate(array):
? ?print (i, a0)
#0 Stone
#1 Tom
#2 Jobs
#3 Jack
14、對齊字符串
有時,你想通過某種對齊方式來格式化字符串,輸出一些提示信息
ss = 'Summary'
### NP:
print ('%s%s%s', '-'*20, ss, '-'*20)
### P:
print (ss.center(50,'-'))
#--------------------Summary--------------------
類似地,想讓字符串左對齊或者右對齊,可以用 .ljust(50, '-') 或 rjust(50, '-')
15、解包
解壓列表/元祖的元素,賦值給不同的變量
lst = ['jack', 18, 'Python', 'Good']
### NP:
name = lst[0]
age = lst[1]
lang = lst[2]
score = lst[3]
### P:
name, age, lang, score = lst
如果想解包一個長列表,只得到其中部分元素,例如第一個和最后一個元素:
### P:
head, *mid, tail = lst
該例子中,除了頭、尾元素之外,中間不受關注的元素作為一個子列表全部賦值給了 mid 。
-END-
長按識別關注 | GitPython
總結
以上是生活随笔為你收集整理的np合并 python_这15个tips,带你领略 Python 的简洁和优雅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: steam每日特惠:荒野大镖客2什么时候
- 下一篇: 原神鱼竿在哪买 鱼竿如何得