python过滤器抛出奇怪的错误

python过滤器抛出奇怪的错误,python,filter,Python,Filter,我有一个列表和一个过滤器,如下所示: matrix = [['X', 'X', 'X'], ['X', 'X', 'X'], ['X', 'X', 'X'], ['O', 'X', 'X'], ['O', 'X', 'X']] s = list(zip(*matrix)[0]) print s[s != 'X'] 当我运行它时,它返回'X' 如果修改为: matrix = [['X', 'X', 'X'], ['O', 'X', 'X'], ['X', 'X', 'X'], ['O',

我有一个列表和一个过滤器,如下所示:

matrix = [['X', 'X', 'X'], ['X', 'X', 'X'], ['X', 'X', 'X'], ['O', 'X', 'X'], ['O', 'X', 'X']] 
s = list(zip(*matrix)[0])

print s[s != 'X']  
当我运行它时,它返回
'X'

如果修改为:

matrix = [['X', 'X', 'X'], ['O', 'X', 'X'], ['X', 'X', 'X'], ['O', 'X', 'X'], ['O', 'X', 'X']] 
s = list(zip(*matrix)[0])

print s[s != 'X']  
然后返回
'O'


我已经在谷歌上搜索了很久,但似乎找不到这是怎么回事。我在这里遗漏了什么,使得它不能排除所有的“X”值?

代码没有问题,它只给出了正确的值

当您运行第一个代码时

>>> matrix = [['X', 'X', 'X'], ['X', 'X', 'X'], ['X', 'X', 'X'], ['O', 'X', 'X'], ['O', 'X', 'X']] 
>>> s = list(zip(*matrix)[0])
s
的值是一个列表

>>> print s
['X', 'X', 'X', 'O', 'O']
现在,当你将
s
与不等式的文本进行比较时,它显然给出了真值

>>> s!= "X"
True
此True在内部被视为s的索引,并被转换为1:

>>> True == 1
True
>>> s[s!="X"]
'X'
>>> s[1]
'X'
在第二种情况下,
s
的值不同:

>>> matrix = [['X', 'X', 'X'], ['O', 'X', 'X'], ['X', 'X', 'X'], ['O', 'X', 'X'], ['O', 'X', 'X']] 
>>> s = list(zip(*matrix)[0])
>>> print s
['X', 'O', 'X', 'O', 'O']
>>> s[1]
'O'

因此,将打印“O”。

要正确过滤出
'X'
,请使用实际函数

>>>[filter(lambda x : x != 'X', sublist) for sublist in matrix]
[[], [], [], ['O'], ['O']]
>>> 

您期望的是什么?在这两种情况下,您都期望它过滤掉“X”的值……因此您希望保持与以前相同的列表格式
s=list(zip(*matrix)[0])
只需使用每个嵌套列表中的第0个元素构建一个列表,然后
print s[s!=“X']
打印列表中第一个“X”之前的元素。或者同样地
[[s代表d中的s,如果s!=“X']代表矩阵中的d]
是的,这是完美的。再次感谢你的回答:)是的,很有道理。非常感谢。