[英]python: subset a nested list if matches in another list
假设我已经将xm列矩阵表示为嵌套的python列表,例如3行和2列:
m = [ [1,2,3], ['a', 'b', 'c'] ]
生成具有行的行的另一个kx m-matrix(k <= n)的通用和pythonic方法,例如,第二列中的值在序列中匹配(这是m
的子集)。 因此,对于以下序列,存在“ a”和“ c”的匹配项:
s = ['j', 'a', 'c', 'e']
所得矩阵m2
应为
m2 = [ [1,3], ['a','c'] ]
什么没有奏效:
我的愚蠢尝试一直存在(它会产生错误/没有用,并且对于许多列的可伸缩性较差):
m2 = [ [x, y] for x, y in m if y in s ]
您可以zip
m
的行以标识第二个项目出现在s
的列,然后再次zip
列以输出行:
list(zip(*(c for c in zip(*m) if c[1] in s)))
返回:
[(1, 3), ('a', 'c')]
如果需要将输出作为列表列表,则可以将zip
生成的元组映射到list
:
list(map(list, list(zip(*(c for c in zip(*m) if c[1] in s)))))
返回:
[[1, 3], ['a', 'c']]
您可以选择让s
一组第一,提高效率的查找,如果有许多项目s
:
s = set(s)
尝试这个:
m2 = [[], []]
for i in range(len(m[1])):
if m[1][i] in s:
m2[0].append(m[0][i])
m2[1].append(m[1][i])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.