ile numaralarının listesini değiştirin:düz alt aralıkları böyle numarası listesi göz önüne alındığında
lst = [0, 10, 15, 17]
ben lst
tüm i
için i -> i + 3
öğeleri olan bir liste istiyorum. Eğer örtüşen aralıklar varsa, onları birleştirmeyi isterim.
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 17, 18, 19, 20]
Fakat son 2 grup için, aralıkları onları birleştirme üzerine böylece şunlara sahip, üst üste:
Yani, yukarıdaki örneğin, öncelikle olsun
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
budur istediğim çıktı. (10000 loops, best of 3: 56 µs per loop
)
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]
Ancak bu yavaş:
Bu hep düşünmüşümdür şeydir. Mümkünse uyuşmuş bir çözüm ya da bundan daha hızlı bir python çözümü istiyorum.
, sınıflandırılması garanti edilen orijinal öğeler nelerdir? –
@ Ev.Kounis Evet. Garantili. –
@ Coldspeed daha sonra bunu kullanabilirsiniz. 'Set' için döküm ve daha hızlı hale getirirse tekrar 'sort'ing. –