Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如果在另一个列表中匹配,则将嵌套列表子集_Python_List_Nested_Subset_Traversal - Fatal编程技术网

python:如果在另一个列表中匹配,则将嵌套列表子集

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']] 如果需

假设我将一个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']]
如果需要输出列表,可以将
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])