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]
是的,这是完美的。再次感谢你的回答:)是的,很有道理。非常感谢。