有没有办法做同样的事情
for i in range(len(x) // 4):
a, b, c, d = x[i*4: i*4+4]
使用单行 lambda。是的,我想使用 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))
现在可以循环这个对 map 的调用,分配给 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()
and xrange()
(在 python 2.x 中。如果您使用的是 Python 3.x,只需将其保留为“范围”。)这种方法不会t 实际上构造了完整的结果列表,但仍然允许对其进行迭代。
这是我的 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 ...