循環是有辦法做同樣的事情,因爲這蟒蛇使用lambda語法
for i in range(len(x) // 4):
a, b, c, d = x[i*4: i*4+4]
使用單線拉姆達。和YES我想要使用lambda。
循環是有辦法做同樣的事情,因爲這蟒蛇使用lambda語法
for i in range(len(x) // 4):
a, b, c, d = x[i*4: i*4+4]
使用單線拉姆達。和YES我想要使用lambda。
看來,OP意味着他的代碼片段是一個循環的框架,而不是實際完成他正在嘗試做的代碼。這可能是更接近他的意圖:
val = []
for c in range(len(x)//4):
val.append(x[c*4:c*4+4])
for a, b, c, d in val:
... do something with a, b, c, d ...
對於例如列表從他的上述評論:
x = ['1', '1377877381', 'off', '0',
'2', '1377886582', 'on', '0',
'3', '1376238596', 'off', '0',
'4', '1377812526', 'off', '0']
val
結束了含
[['1', '1377877381', 'off', '0'],
['2', '1377886582', 'on', '0'],
['3', '1376238596', 'off', '0'],
['4', '1377812526', 'off', '0']]
使用map()
和lambda
長相等效線像這樣:
val = map(lambda y: x[y*4:y*4+4], range(len(x)//4))
一個現在可以遍歷這個調用映射,分配到A,B,C,d,並盡一切:
for a, b, c, d in map(lambda y: x[y*4:y*4+4], range(len(x)//4)):
... more code ...
希望有點幫助。
當然,更有效的方式來做到這一點(特別是長列表)是使用itertools.imap()
和xrange()
(在Python 2.x中如果你使用的是Python 3.x中,只要把它「的範圍。 「)這種方法實際上並不構建完整的結果列表,但仍然允許迭代它。
這裏是我的Python 2.x版:
from itertools import imap
for a, b, c, d in imap(lambda y: x[y*4:y*4+4], xrange(len(x)//4)):
... more code ...
我能夠正確使用'val = list(map(lambda:self.function_here(args [y * 4:y * 4 + 4]),range(len(args)// 4)))'。謝謝 – user2602977
很高興幫助! –
我只想說,我認爲在這裏使用的λ是一個糟糕的選擇。它所要做的就是降低可讀性。除非你打高爾夫球,否則我沒有理由這麼做。僅僅因爲某一行在某一行不會使其運行得更快。 – vroomfondel
我使用exec將整個函數放入lambda中,但它只返回循環中的第一項而不是全部。你可以說它的外觀 – user2602977
這段代碼除了指定'a','b','c'和'd'外什麼都不做,就是你想在一行上發生什麼? – Claudiu