我有一个列表,A = [1.10,1.11,1.12,1.21,1.22,1.48]
和我想的列表A
组到嵌套列表B
与输出:分组列表进入的条件下嵌套列表 - Python的
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?我希望例子足以继续下去。
我有一个列表,A = [1.10,1.11,1.12,1.21,1.22,1.48]
和我想的列表A
组到嵌套列表B
与输出:分组列表进入的条件下嵌套列表 - Python的
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?我希望例子足以继续下去。
这里的另一种方式,可以由具有iterables没有长度或不能直接索引工作:
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
作品中关于缓存值读了虽然。
可能有一个漂亮的解决方案,但这个工程:
>>> 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]]
试试这个:
[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)]
zip(A, A[1:], A[2:])
这使得它很容易在一个函数来包装和推广,以组N,并且还可以很容易地变成迭代器。 (在Python 3.x中,它已经是;在2.x中,只使用itertools.izip
代替zip
)
但是其他的解决方案是不是对于任何上述用途,更难;这真是一个投资。
我认为我们在这里接近相同的线......将上述变成'zip(* [A [n:] for n in range(3 )])'足够简单,并返回内部元组而不是列表,因为OP显示为输出。 –
@JonClements:'zip' _already_返回内部元组而不是列表。但是,是的,这就是你如何概括为N. – abarnert
我指的是目前最高的投票答案创建列表的列表,而不是元组列表...... –
为什么'range(len(A) - 2)'而不是'if'? – Bakuriu
@Bakuriu哦,当然,谢谢:) – alecxe
你假设上面的列表已经排序。为了确保,我会在中间添加另一个'sort'语句。 –