我有一個列表,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'語句。 –