簡體   English   中英

如何從給定的范圍數組創建數組

[英]How to create an array from a given array of ranges

我有這個代碼:

    pg=[(10, 19), (30, 32), (37, 38), (50, 59), (63, 64),
    (69, 69), (120, 121), (124, 129), (130, 139), (160, 161),
    (164, 169), (180, 182), (185, 185), (189, 189), (190, 192),
    (194, 194), (196, 199), (260, 269), (270, 279), (300, 309),
    (330, 339), (358, 359), (360, 369)]

這些是給定的范圍,例如, pg[0]應該是 10, pg[1]應該是 11, pg[2]是 12。對於其余的范圍,依此類推。 所以我希望最終的數組是這樣的:

    pg=[10, 11, 12, 13 ....19, 30, 31,....,32,37, 38,50,51,....,59,63.. and so on]

我怎么能在python中做到這一點? 是否可以在不硬編碼新數組中的每個元素范圍的情況下做到這一點?

嘗試這個

l = []
for r in pg:
    l.extend(range(r[0], r[1]+1))

這是使用列表itertools.chainitertools.chain (扁平化列表)的一種方法

前任:

from itertools import chain
pg=[(10, 19), (30, 32), (37, 38), (50, 59), (63, 64),
    (69, 69), (120, 121), (124, 129), (130, 139), (160, 161),
    (164, 169), (180, 182), (185, 185), (189, 189), (190, 192),
    (194, 194), (196, 199), (260, 269), (270, 279), (300, 309),
    (330, 339), (358, 359), (360, 369)]

result = list(chain.from_iterable([range(*i) for i in pg]))
print(result)

一個線性

 sum([list(range(x1, x2+1)) for x1, x2 in pg], [])

我想以下可能有效

pg = [(10, 19), (30, 32), (37, 38), (50, 59), (63, 64),
    (69, 69), (120, 121), (124, 129), (130, 139), (160, 161),
    (164, 169), (180, 182), (185, 185), (189, 189), (190, 192),
    (194, 194), (196, 199), (260, 269), (270, 279), (300, 309),
    (330, 339), (358, 359), (360, 369)]
arr = []
for val in pg:
    arr += list(range(val[0], val[1] + 1))
print(arr)

另一個使用列表理解的例子

a = [(10, 19), (30, 35)]
b = [j for i in a for j in range(i[0], i[1]+1)]
print(b) 

#output
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 30, 31, 32, 33, 34, 35]

在 sum 函數的幫助下,我們也可以實現這一點。

pg=[(10, 19), (30, 32), (37, 38), (50, 59), (63, 64),
    (69, 69), (120, 121), (124, 129), (130, 139), (160, 161),
    (164, 169), (180, 182), (185, 185), (189, 189), (190, 192),
    (194, 194), (196, 199), (260, 269), (270, 279), (300, 309),
    (330, 339), (358, 359), (360, 369)]      

print (list(sum(pg,())))

#output:[10, 19, 30, 32, 37, 38, 50, 59, 63, 64, 69, 69, 120, 121, 124, 129, 130, 139, 
#160, 161, 164, 169, 180, 182, 185, 185, 189, 189, 190, 192, 194, 194, 196, 199, 260, 
#269, 270, 279, 300, 309, 330, 339, 358, 359, 360, 369]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM