以下是我尝试做的事情(在单一列表理解中):
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
- 可以在返回的布尔列表上轻松完成其他衍生/分析。
答案 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]