2013-03-11 68 views
0

任何人都可以幫我一個嗎?兩個列表之間的範圍

我想找到一種方法來計算整數2列表之間的範圍;和以獲取必要的每個步驟,以從一個列表到下一個接着

使用這些2個數組:

a = [1,1,1] 

b = [3,4,3] 

我想到達的值在兩者之間的序列:

[[2,2,2], [None,3,None]] 

感謝 一個

+1

值得一提的這些名單,不是數組。 – 2013-03-11 17:57:06

回答

1

的Lattywares回答在Python 2.5及以下工程時izip_longest不適的變化:

map(None, *[range(x + 1, y) for x, y in zip(a, b)]) 
+1

請注意,這在3.x中不起作用,並且可讀性較差,所以在2.5或之前使用它只是一個好主意(並且一般來說,沒有太多充分的理由可以使用這種過時的版)。 – 2013-03-11 22:02:20

+0

@Lattyware,是的,但有時你別無選擇 - 例如,2.5仍然是當前穩定的jython版本。 – l4mpi 2013-03-11 22:14:38

+0

哇,真的嗎?我不知道Jython是如此落後,當我在3.3之前陷入困境時,我感到很惱火,更別提2.7之前的版本了。 – 2013-03-12 01:28:54

4

這是itertools.zip_longest()做的相當簡單和list comprehension

>>> import itertools 
>>> list(itertools.zip_longest(*[range(i+1, j) for i, j in zip(a, b)])) 
[(2, 2, 2), (None, 3, None)] 

注意,在2.X itertools.zip_longest()不存在 - 這就是所謂的itertools.izip_longest()代替。

這個作品通過zip()這些價值在一起,所以我們得到的界限,然後我們生成我們需要的範圍(加入一個下邊界,因爲你似乎不想包括它),然後我們把它們分成部分,使用itertools.zip_longest()(其中還引入了None值)。

+0

不錯,比我的好多了。 – 2013-03-11 17:52:50

+0

歡呼!這很有幫助 – 2013-03-11 19:57:34