使用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。非常感谢。