使用列表理解的列表的布尔逻辑比较

时间:2017-11-08 23:05:22

标签: python if-statement list-comprehension boolean-logic

以下是我尝试做的事情(在单一列表理解中):

1。使用逻辑运算符来比较2个bool整数列表的关系 2. 返回bool-int值列表,其中:
    当a,b值均为1(1,1)时, - 返回1     当= = 1且b == 0(1,0)时,返回 - 0      - 跳过其他情况,如(0,0& 0,1)

示例逻辑:

A = [1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0]
B = [1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]
L = []

for i in range(len(B)):
    if A[i] + B[i] == 2:
        L.append(1)
    elif A[i]==1 and B[i]==0:
        L.append(0)

打印的预期输出(L):

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

我的尝试:(syntaxError指向' for')(并且它有点长)

L = [1 if x+y == 2 else 0 if x-y == 1 for x,y in zip(A, B)]  

Wander Nauta的最佳答案(Pythonic and fast)

L = [y for x, y in zip(A, B) if x]  


我的参考点之几:
- add-sum-of-values-of-two-lists-into-new-list
- if-else-in-a-list-comprehension
- elif-in-list-comprehension-conditionals

用例:
- 比较表示用户/客户所需的功能组(un)的列表,以及(un)可用于给定产品/服务的列表
- 返回的1代表desires_met,0代表desires_unmet
- 可以在返回的布尔列表上轻松完成其他衍生/分析。

3 个答案:

答案 0 :(得分:0)

这是怎么回事?

L = [int(y) for x, y in zip(A, B) if int(x)]

如果x为0,则跳过该项。否则,如果y为1,则加1;如果y为0,则加0。

答案 1 :(得分:0)

我认为这样的事情会更容易阅读和扩展:

A = '11111111111000000010'
B = '11101010101010101010'

result_map = {
    ('1', '1'): 1,
    ('1', '0'): 0,
}

result = [result_map[pair] for pair in zip(A, B) if pair in result_map]

答案 2 :(得分:0)

这个问题相当令人费解,但我相信你想要的是:

a = [int(x) for x in A] 
b = [int(x) for x in B]
c = [x for x in zip(a, b)]
I = [idx for (idx, x) in enumerate(a) if x == 0]
L = [x for (idx, x) in enumerate(b) if idx not in I]