python:如果在另一个列表中匹配,则将嵌套列表子集
假设我将一个n行x m列矩阵表示为一个嵌套的python列表,例如3行和2列:python:如果在另一个列表中匹配,则将嵌套列表子集,python,list,nested,subset,traversal,Python,List,Nested,Subset,Traversal,假设我将一个n行x m列矩阵表示为一个嵌套的python列表,例如3行和2列: m = [ [1,2,3], ['a', 'b', 'c'] ] 生成另一个k x m矩阵(k的通用和python方法是什么?您可以zip对m中的行进行识别,以识别第二项出现在s中的列,并再次对列进行zip以输出行: list(zip(*(c for c in zip(*m) if c[1] in s))) 这将返回: [(1, 3), ('a', 'c')] [[1, 3], ['a', 'c']] 如果需
m = [ [1,2,3], ['a', 'b', 'c'] ]
生成另一个k x m矩阵(k的通用和python方法是什么?您可以
zip
对m
中的行进行识别,以识别第二项出现在s
中的列,并再次对列进行zip
以输出行:
list(zip(*(c for c in zip(*m) if c[1] in s)))
这将返回:
[(1, 3), ('a', 'c')]
[[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')]
[[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])
啊,对不起-我在接受时没有注意。我试图只在
m
的第2列进行选择。当s=['j',a',c',e',2]时,您的代码错误地返回[(1,2,3),('a','b','c')]
因为1
在m的第一列中有一个匹配项。那么2的列号是固定的吗?还是最后一列?让我们说它是固定的完美的人!当我尝试使用这些理解时,我的头都碎了。很好的解释!
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])