之前python裡面sum的理解不太到位,今天看到了乙個碾平list的answer. 看完才明白,sum還可以加陣列,加字串。
碾平list的**是這樣的。
s =[1
,[2,
[3,4
]]]flat =
lambda l:
sum(
map(flat, l),[
])ifisinstance
(l,list
)else
[l]res = flat(s)
print
(res)
a =[1
,2,[
3,4]
,[[5
,6],
[7,8
,[1,
[3,4
,[5]
]]]]
]flatten =
lambda x:
[y for l in x for y in flatten(l)]if
type
(x)is
list
else
[x]print
(flatten(a)
)
普通的遞迴寫法是這樣的:
res =
deffun
(s):
for i in s:
ifisinstance
(i,list):
fun(i)
else
:fun(s)
print
(res)
這個題並不是sum的重點,重點是最上面的第一種寫法。sum(map(flat, l), )
這段**是什麼意思?
sum(sequence[,start]) sum函式可以帶初始值,如果是空列表,就可以進行列表合併,但是,前面的必須得是列表巢狀列表的樣式才行。
>>> a = [[1],[2,3],[4,5,6]]
>>> sum(a, )
[1, 2, 3, 4, 5, 6]
這樣的話,就很容易看明白上面的lambda函式是如果實現的了。 python高階用法 Python高階用法
python高階用法 三元表示式 x 10 y 20 print x if x y else y x 100 y 20 print x if x y else y 列表推導式和生成器 列表推導式 print i for i in range 10 print i 2 for i in range 1...
input高階用法
1.取消按鈕按下時的虛線框 在input裡新增屬性值 hidefocus 或者 hidefocus true 2.唯讀文字框內容 在input裡新增屬性值 readonly 3.防止退後清空的text文件 可把style內容做做為類引用 4.enter鍵可以讓游標移到下乙個輸入框 5.只能為中文 有...
scanf,sscanf高階用法
最近遇到了解析配置的問題,用正規表示式感覺大題小做,使用sscanf因只會用基本用法,感覺功能不夠,上網搜了下,解析起來不費吹灰之力,也很簡潔。原帖出處不詳,網上到處是,我做了點修改 名稱 sscanf 從乙個字串中讀進與指定格式相符的資料.函式原型 int sscanf string str,st...