蟒蛇使用lambda语法
循环是有办法做同样的事情,因为这蟒蛇使用lambda语法
for i in range(len(x) // 4):
a, b, c, d = x[i*4: i*4+4]
使用单线拉姆达。和YES我想要使用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))
一个现在可以遍历这个调用映射,分配到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 ...
我能够正确使用'val = list(map(lambda:self.function_here(args [y * 4:y * 4 + 4]),range(len(args)// 4)))'。谢谢 – user2602977
很高兴帮助! –
我只想说,我认为在这里使用的λ是一个糟糕的选择。它所要做的就是降低可读性。除非你打高尔夫球,否则我没有理由这么做。仅仅因为某一行在某一行不会使其运行得更快。 – vroomfondel
我使用exec将整个函数放入lambda中,但它只返回循环中的第一项而不是全部。你可以说它的外观 – user2602977
这段代码除了指定'a','b','c'和'd'外什么都不做,就是你想在一行上发生什么? – Claudiu