Cho một danh sách các số, như thế này:Thay thế một danh sách các số với TV phụ dãy
lst = [0, 10, 15, 17]
Tôi muốn một danh sách đó có các yếu tố từ i -> i + 3
cho tất cả i
trong lst
. Nếu có phạm vi chồng chéo, tôi muốn chúng được hợp nhất.
Vì vậy, đối với ví dụ trên, trước tiên chúng ta nhận được:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 17, 18, 19, 20]
Nhưng đối với 2 nhóm cuối cùng, phạm vi chồng chéo lên nhau, vì vậy khi sáp nhập chúng, bạn phải:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
Đây là sản lượng mong muốn của tôi.
Đây là những gì tôi đã nghĩ:
from collections import OrderedDict
res = list(OrderedDict.fromkeys([y for x in lst for y in range(x, x + 4)]).keys())
print(res) = [0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
Tuy nhiên, đây là chậm (10000 loops, best of 3: 56 µs per loop
). Tôi muốn một giải pháp numpy nếu có thể, hoặc một giải pháp python đó là nhanh hơn này.
là các yếu tố ban đầu được đảm bảo để được sắp xếp? –
@ Ev.Kounis Có. Đảm bảo. –
@Coldspeed thì bạn có thể sử dụng. Đúc thành 'set' và sau đó' sắp xếp' lại nếu nó làm cho nó nhanh hơn. –