python推導式pythonic必備

weixin_34357887發表於2018-02-24

推導式(又稱解析式) 是Python的⼀種獨有特性。

推導式是可以從⼀個資料序列構建另⼀個新的資料序列的結構體。 共有三種推導:

  • 列表(list)推導式
  • 字典(dict)推導式
  • 集合(set)推導式

列表推導式 (list comprehensions)

列表推導式(又稱列表解析式) 提供了⼀種簡明扼要的方法來建立列表。

它的結構是在一箇中括號裡包含一個表示式, 然後是一個for語句, 然後是0個或多個for或者if語句。 那個表示式可以是任意的, 意思是你可以在列表中放入任意型別的物件。 返回結果將是⼀個新的列表, 在這個以if和for語句為上下⽂的表示式運⾏完成之後產生

規範
variable = [x for x in list if something == 2]
這⾥是另外⼀個簡明例子:

multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

列表推導式在有些情況下超讚, 特別是當你需要使⽤for迴圈來生成一個新列表。 舉個例子, 通常一般人會這樣做:

squared = []
for x in range(10):
    squared.append(x**2)

你可以使⽤列表推導式來簡化它:
squared = [x**2 for x in range(10)]


字典推導式(dict comprehensions)

字典推導式,使用的場景比較少,但是有一點是超級讚的!

問題:遇到字典的鍵值對互換,你會怎麼操作?

  1. 使用for迴圈?
mydict={"a":1,"b":2,"c":3}
mydict_new={}
for key,val in mydict.items():
    mydict_new[val]=key
  1. 使用zip?
mydict={"a":1,"b":2,"c":3}
newdict=dict(zip(mydict.values(),mydict.keys()))
  1. say no,你應該使用字典推導式!
mydict={"a":1,"b":2,"c":3}
newdict={v: k for k, v in some_dict.items()}
or
newdict=dict([val,key] for key,val in mydict.items())

集合推導式(set comprehensions)

至於集合推導式,跟列表推導式大同小異,不過在去重方面是set的強項
舉個栗子:

squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}

相關文章