0

我有一个列表,A = [1.10,1.11,1.12,1.21,1.22,1.48] 我想将该列表分组A到一个嵌套列表中B,并输出:

B = [(1.10, 1.11, 1.12),
     (1.11, 1.12, 1.21),
     (1.12, 1.21, 1.22),
     (1.21, 1.22, 1.48)]

我怎么能从A生产B?我希望例子足以继续下去。

4

4 回答 4

5

可能有一个更漂亮的解决方案,但这有效:

>>> A = [1.10,1.11,1.12,1.21,1.22,1.48]
>>> [A[i:i+3] for i in range(len(A) - 2)]
[[1.1, 1.11, 1.12], [1.11, 1.12, 1.21], [1.12, 1.21, 1.22], [1.21, 1.22, 1.48]]
于 2013-08-16T20:02:38.227 回答
4
zip(A, A[1:], A[2:])

这使得包装函数和泛化到 N 组变得容易,并且也容易变成迭代器。(在 Python 3.x 中,它已经是;在 2.x 中,只需使用itertools.izip而不是zip.)

但是对于这两个目的,另一种解决方案并没有那么困难。这真是一个折腾。

于 2013-08-16T20:14:14.277 回答
3

这是另一种可以用于没有长度或无法直接索引的迭代的方法:

from itertools import tee, islice, izip
A = [1.10,1.11,1.12,1.21,1.22,1.48]
groups = izip(*[islice(el, n, None) for n, el in enumerate(tee(A, 3))])
print list(groups)
# [(1.1, 1.11, 1.12), (1.11, 1.12, 1.21), (1.12, 1.21, 1.22), (1.21, 1.22, 1.48)]

不过,请谨慎阅读itertools.tee有关缓存值的工作原理。

于 2013-08-16T20:14:43.423 回答
1

尝试这个:

[tuple(A[i:i+3]) for i in xrange(len(A)-2)]

=> [(1.1, 1.11, 1.12),  (1.11, 1.12, 1.21),
    (1.12, 1.21, 1.22), (1.21, 1.22, 1.48)]
于 2013-08-16T20:06:39.973 回答