Select 如果元素出现在第二个列表中则为子列表
Select sublist if element present in second list
我有两个列表:
A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'], ['3','5', 'X', 'Y']]
B = ['X', 'Y']
我想创建第三个列表 C
,其中包含 A
的子列表,其中的元素定义在 B
(/ 或)上。
C = [[67', '75', 'X'],['1','2', 'Y'], ['3','5', 'X', 'Y']]
我试过:
C = [i for i in B if i in A]
但这没有用,我得到一个空的 C 列表。请告诉我什么是获得 C 的最佳方法。
使用列表理解来检查 B
中的任何元素是否在 A
中:
A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'], ['3','5', 'X', 'Y']]
B = ['X', 'Y']
C = [x for x in A if any(y in x for y in B)]
# [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]
C = [y for y in A for x in B if x in y]
这应该可以解决问题。
你也可以使用这个:
C = list()
for i in A:
if B[0] in i or B[1] in i:
C.append(i)
您还可以使用 set intersection 检查 A
和 b
的元素 e
(子列表)之间是否有任何共同元素定义为 set(B)
.
所以,
b = set(B)
C = [ e for e in A if b.intersection(set(e)) ]
#=> [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]
我有两个列表:
A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'], ['3','5', 'X', 'Y']]
B = ['X', 'Y']
我想创建第三个列表 C
,其中包含 A
的子列表,其中的元素定义在 B
(/ 或)上。
C = [[67', '75', 'X'],['1','2', 'Y'], ['3','5', 'X', 'Y']]
我试过:
C = [i for i in B if i in A]
但这没有用,我得到一个空的 C 列表。请告诉我什么是获得 C 的最佳方法。
使用列表理解来检查 B
中的任何元素是否在 A
中:
A = [['67', '75', 'X'], ['85','72', 'V'], ['1','2', 'Y'], ['3','5', 'X', 'Y']]
B = ['X', 'Y']
C = [x for x in A if any(y in x for y in B)]
# [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]
C = [y for y in A for x in B if x in y]
这应该可以解决问题。
你也可以使用这个:
C = list()
for i in A:
if B[0] in i or B[1] in i:
C.append(i)
您还可以使用 set intersection 检查 A
和 b
的元素 e
(子列表)之间是否有任何共同元素定义为 set(B)
.
所以,
b = set(B)
C = [ e for e in A if b.intersection(set(e)) ]
#=> [['67', '75', 'X'], ['1', '2', 'Y'], ['3', '5', 'X', 'Y']]