python for loop使用lambda语法

时间:2013-08-30 19:37:53

标签: python function lambda

有没有办法做同样的事情

for i in range(len(x) // 4):
    a, b, c, d = x[i*4: i*4+4]

使用单行lambda。是的我想使用lambda。

1 个答案:

答案 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  ...