python:如果在另一个列表中匹配,则对嵌套列表进行子集化

时间:2019-02-25 21:36:00

标签: python list nested subset traversal

说我已经将n行x m列矩阵表示为嵌套的python列表,例如3行2列:

m = [ [1,2,3], ['a', 'b', 'c'] ]

将生成另一种kx m-matrix(k <= n)的通用和Python方法,该行的行中第二列中的值在序列中具有匹配项(即{{1}的子集) }。 因此,对于以下序列,存在“ a”和“ c”的匹配项:

m

结果矩阵s = ['j', 'a', 'c', 'e'] 应该

m2

什么不起作用:

我的愚蠢尝试一直存在(它会产生错误/没有用,并且对许多列的可伸缩性较低):

m2 = [ [1,3], ['a','c'] ]

2 个答案:

答案 0 :(得分:2)

您可以zipm来标识列第二项在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)

答案 1 :(得分:0)

尝试一下:

uarr