有没有办法做同样的事情
for i in range(len(x) // 4):
a, b, c, d = x[i*4: i*4+4]
使用单行lambda。是的我想使用lambda。
答案 0 :(得分:1)
看起来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 ...