-4

有没有办法做同样的事情

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

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

4

1 回答 1

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))

现在可以循环这个对 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  ...
于 2013-08-30T20:27:01.893 回答