2013-05-13 118 views
-2

如果該列表中的值滿足某些條件等於y-nMoments而我不想從另一個列表(gcounter)獲取某些變量(m1)相當於nMoments+1如果「any」返回true,則取值python

m1=[[y if y!=nMoments+1 else any(y-nMoments) for y in x] for x in gcounter] 

目前這個返回:

[[0, 0], [0, 2], [1, 1], [2, 0], [0, True], [1, 2], [2, 1], [True, 0]] 

原來的列表,(gcounter)是:

[[0, 0], [0, 2], [1, 1], [2, 0], [0, 1], [1, 2], [2, 1], [1, 0]] 

但我只想要得到那些True值,然後數字值,而不是真相聲明。

有誰知道我該如何解決這個問題?我已經嘗試將If語句放入第一行,但是出現語法錯誤。

我想m1什麼從原來的名單採取的是:

[[1,0] ,[0,1]] 
+2

顯示gcounter和desribe要看到出口 – Denis 2013-05-13 13:08:32

+4

它會是什麼如果你只是寫下你的問題就更容易了:1)原始列表,2)期望的結果3)你的代碼到目前爲止。描述和閱讀描述輸出的句子都很難。 – timss 2013-05-13 13:08:50

+1

和'any()'把一個序列作爲輸入,但是從你的例子我看起來'y'和'nMoments'是*整數*;在一個整數上使用'any()'是沒有意義的,並引發一個'TypeError'。 – 2013-05-13 13:10:39

回答

0

我不完全明白你的問題,但它聽起來像是你想要的名單,理解語法的if部分:

>>> input_list = [1,2,3,4,5] 
>>> [x for x in input_list if x != 2] 
[1, 3, 4, 5] 

docs有幾個例子

1

我想你想要什麼,字裏行間,是:

m1 = [x for x in gcounter if any(y - nMoments and y != nMoments + 1 for y in x)] 

這挑選在gcounter所有x(每個列表),僅當有在該列表中(y)其中y - nMoments不爲0且y不等於nMoments + 1任何值。

這個測試可以簡化爲:如果你想在條件滿足的子表,而不是對所有的人的任何元素

m1 = [x for x in gcounter if any(y - nMoments not in (0, 1) for y in x)] 
+0

'y == y - nMoments'相當於'nMoments == 0',這似乎沒有用。 – interjay 2013-05-13 13:17:15

+0

@interjay:的確,但這是心理調試,OP沒有發出非常強烈的信號。 – 2013-05-13 13:18:22

+0

@interjay:如果我們假設OP想測試'y - nMoments'是不是'0',那麼基本上他的意思是測試'y!= nMoments',然後測試真的是'y - nMoments不在(0,1)'中。 – 2013-05-13 13:21:08

1
c = lambda x: all(map(lambda y: y == nMoments and y != nMoments+1, x)) 
filter(c ,gcounter) 

,只需更改所有()對於任何()。這將返回滿足條件的原始列表的元素。

你有問題是任何()返回一個布爾值,這就是爲什麼你越來越原因[1,真]

+0

我只是試着運行你的在這裏發佈,但它只返回: at 0x31c2578> – user124123 2013-05-14 09:52:02

+0

我也試着改變我的代碼從任何到所有,但它仍然做同樣的事情。 – user124123 2013-05-14 09:59:18

+0

您能否提供nMoments的示例有效值?我試過了,它從原始的那個返回一個子列表,用於那些內部元素滿足條件的元素(列表) – 2013-05-14 19:37:30

相關問題