2013-10-09 54 views
1

首先對不起,如果這是之前問。迭代和替換槽雙陣列

有了這個數組:

a = [1, None, 2], [3, 4, 5], [6, None, 7] 

我需要更換無的值0.我的第一個實現是走線槽的數組,但我想這樣做在同一行。

我想這樣的事情,但沒有工作:

a = [0 if value is None else value for value in a[i][1] for i in range(len(a))] 

顯然是行不通的,什麼是正確的做法?

編輯:我不想觸摸其他位置,只是在arrya中的每個元素的第二個位置。

此:

a = [None, None, 2], [3, 4, 5], [6, None, 7] 

將返回此:

a = [None, 0, 2], [3, 4, 5], [6, 0, 7] 
+0

有多深,可以在你嵌套去? – thegrinner

+0

只是,不是更深 –

回答

2

使用嵌套列表理解:

>>> a = [[1, None, 2], [3, 4, 5], [6, None, 7]] 
>>> [[0 if x is None else x for x in sublist] for sublist in a] 
[[1, 0, 2], [3, 4, 5], [6, 0, 7]] 

或另一種方法下,如果只着眼於第二項在每個子列表中:

>>> [x[:1] + ([0] if x[1] is None else x[1:2]) + x[2:] for x in a] 
[[1, 0, 2], [3, 4, 5], [6, 0, 7]] 
+0

我只需要評估 –

+0

的第二個位置的值您是否擁有沒有「None」值的元素? –

+0

我假設你是指每個子列表的第二個位置,我的編輯應該在這種情況下工作。 –

1

嵌套列表內涵將做到這一點:

>>> a = [1, None, 2], [3, 4, 5], [6, None, 7] 
>>> [[c if c is not None else 0 for c in b] for b in a] 
[[1, 0, 2], [3, 4, 5], [6, 0, 7]] 
>>> 
+0

我只需要評估 –

3

使用or

>>> a = [[1, None, 2], [3, 4, 5], [6, None, 7]] 
>>> [[x or 0 for x in l] for l in a] 
[[1, 0, 2], [3, 4, 5], [6, 0, 7]] 

或者,如果你只是想評價的第二個元素:

>>> a = [[1, None, 2], [3, 4, 5], [6, None, 7]] 
>>> [[l[0], l[1] or 0] + l[2:] for l in a] 
[[1, 0, 2], [3, 4, 5], [6, 0, 7]] 
+0

的第二個位置的值我只需要評估第二個位置的值 –