如果为“则取值”;任何;返回真正的python

如果为“则取值”;任何;返回真正的python,python,Python,我正在尝试获取一个变量(m1)以从另一个列表(gcounter)中取出一些值,如果该列表中的值满足以下条件:等于y-nmomets,而不等于nmomets+1 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]] 原始列表(gco

我正在尝试获取一个变量(
m1
)以从另一个列表(
gcounter
)中取出一些值,如果该列表中的值满足以下条件:等于
y-nmomets
,而不等于
nmomets+1

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
)是:

但我只想得到那些
True
,然后是数值,而不是真值语句

有人知道我如何解决这个问题吗?我曾尝试将If语句放在第一行中,但出现语法错误

我想从原始列表中获得的
m1
是:

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

我不完全理解你的问题,但听起来你想要列表理解语法的
if
部分:

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

还有几个例子

我想你想要的是,在字里行间阅读:

m1 = [x for x in gcounter if any(y - nMoments and y != nMoments + 1 for y in x)]
仅当该列表(
y
)中有任何值(
y
)且
y-nmots
不为0且
y
不等于
nmots+1
时,才会选择
gcounter
中的所有
x

该测试可简化为:

m1 = [x for x in gcounter if any(y - nMoments not in (0, 1) for y in x)]
如果希望子列表中的任何元素满足条件,而不是所有元素,只需将all()更改为any()。这将返回原始列表中满足条件的元素


您遇到的问题是any()返回一个布尔值,这就是为什么您得到[1,True]

show gcounter并描述您希望在Exit上看到的内容。如果您只编写问题,如:1)原始列表,2)期望结果3)到目前为止您的代码,这会更容易。描述和阅读描述输出的句子都很困难。而且
any()
将序列作为输入,但从您的示例I来看,
y
nmomets
是整数;对整数使用
any()
没有任何意义,会引发
TypeError
y==y-nmomets
相当于
nmomets==0
,这似乎没有什么用处。@interjay:的确,但这是心理调试,OP并没有发出很强的信号。@interjay:如果我们假设OP想要测试
y-nmomets
不是
0
,那么他基本上是想测试
y!=n组件
然后测试实际上是针对不在(0,1)中的y-n组件。有道理,我想这是根据我们所拥有的进行的最佳猜测。我刚刚尝试了这个方法,并返回了完整的原始列表:[[0,0],[0,2],[1,1],[2,0],[0,3],[1,2],[3,0]]我刚刚试着运行你在这里发布的内容,但它只返回:我也试着将代码从任意更改为全部,但它仍然执行相同的操作。你能为nmoots提供一个有效的示例值吗?我试过了,它从原始列表返回一个子列表,用于那些内部元素满足条件的元素(列表)
m1 = [x for x in gcounter if any(y - nMoments not in (0, 1) for y in x)]
c = lambda x: all(map(lambda y: y == nMoments and y != nMoments+1,  x))
filter(c ,gcounter)