为python矩阵中的匹配创建一个布尔矩阵

时间:2014-05-27 10:06:03

标签: python

说我想检测A中的零:

A = [1, 0, 10, 5, 0, 0, 5]

我想了

def check(x):
    if x!=0:
        return 0
    elif x==0:
        return 1
b = [check(x) for x in A]


-> b = [0, 1, 0, 0, 1, 1, 0]

但如何使这成为一个oneliner?

3 个答案:

答案 0 :(得分:3)

列表理解。你可以使用0为假的事实,任何非零整数都是真实的:

>>> A = [1, 0, 10, 5, 0, 0, 5]
>>> [0 if a else 1 for a in A]
[0, 1, 0, 0, 1, 1, 0]

或等同地:

>>> [int(not a) for a in A]
[0, 1, 0, 0, 1, 1, 0]

只是一个有趣的数学技巧:

>>> [0**a for a in A]
[0, 1, 0, 0, 1, 1, 0]
>>> map((0).__pow__, A)
[0, 1, 0, 0, 1, 1, 0]

答案 1 :(得分:1)

 print map(lambda x: int(x==0), A)

答案 2 :(得分:0)

你可以这样做:

A = [1, 0, 10, 5, 0, 0, 5]

result = [1 if i==0 else 0 for i in A]

>>> print result
[0, 1, 0, 0, 1, 1, 0]