使用lambda语法的python for循环

使用lambda语法的python for循环,python,function,lambda,Python,Function,Lambda,有没有办法做到这一点 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

有没有办法做到这一点

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 ...
希望这有点帮助

当然,尤其对于长列表,更有效的方法是在Python2.x中使用itertools.imap和xrange。如果您使用的是Python3.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  ...

我只想说,我认为在这里使用lambda是一个糟糕的选择。它只会降低可读性。除非你在玩代码高尔夫,否则我看不出有什么理由这么做。我使用exec将整个函数放入lambda,但是它只返回循环中的第一项,而不是所有项。你可以说它的外观这个代码除了赋值a,b,c和d之外什么都不做-这就是你想在一行上发生的吗?是的,它需要在一个for循环中。需要返回多个列表您的代码不会返回多个列表。它反复地将x的各个元素分配给a、b、c和d。我能够正确地使用val=listmaplambda y:self.function_hereargs[y*4:y*4+4],rangleargs//4。非常感谢。