使用列表推导式对列表进行布尔逻辑比较
Boolean-logical Comparison of Lists Using List Comprehension
这是我正在尝试做的事情(在单个列表理解中):
1. 使用逻辑运算符比较 2 个布尔整数列表的关系
2. Return bool-int 值列表,其中:
- a,b均为1时返回1 (1,1)
- 当a==1 and b==0时返回0 (1,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]
我的尝试:(语法错误指向'for')(有点长)
L = [1 if x+y == 2 else 0 if x-y == 1 for x,y in zip(A, B)]
Wander Nauta 的最佳答案(Pythonic 和快速)
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
用例:
- 比较表示 user/customer 不想要的和给定 product/service
不可用的功能集的列表
- 返回的 1 代表 desires_met,0 代表 desires_unmet
- 进一步 derivatives/analysis 可以很容易地在返回的布尔列表上完成。
这个怎么样?
L = [int(y) for x, y in zip(A, B) if int(x)]
如果 x 为 0,则跳过该项目。否则,如果 y 为 1,则加 1;如果 y 为 0,则加 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]
问题比较绕,但我相信你想要的是:
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]
这是我正在尝试做的事情(在单个列表理解中):
1. 使用逻辑运算符比较 2 个布尔整数列表的关系
2. Return bool-int 值列表,其中:
- a,b均为1时返回1 (1,1)
- 当a==1 and b==0时返回0 (1,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]
我的尝试:(语法错误指向'for')(有点长)
L = [1 if x+y == 2 else 0 if x-y == 1 for x,y in zip(A, B)]
Wander Nauta 的最佳答案(Pythonic 和快速)
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
用例:
- 比较表示 user/customer 不想要的和给定 product/service
不可用的功能集的列表
- 返回的 1 代表 desires_met,0 代表 desires_unmet
- 进一步 derivatives/analysis 可以很容易地在返回的布尔列表上完成。
这个怎么样?
L = [int(y) for x, y in zip(A, B) if int(x)]
如果 x 为 0,则跳过该项目。否则,如果 y 为 1,则加 1;如果 y 为 0,则加 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]
问题比较绕,但我相信你想要的是:
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]