如果为“则取值”;任何;返回真正的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)