首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:在另一个列表中匹配的嵌套列表子集

python:在另一个列表中匹配的嵌套列表子集
EN

Stack Overflow用户
提问于 2019-02-25 21:35:59
回答 2查看 402关注 0票数 1

假设我将n行x列-矩阵表示为嵌套的python列表,例如3行和2列:

代码语言:javascript
复制
m = [ [1,2,3], ['a', 'b', 'c'] ]

这将是一种泛型和pythonic的方法来生成另一个k矩阵(k <= n),其中第二列中的值在序列中有匹配(即m的子集)。因此,对于下面的序列,有“a”和“c”的匹配:

代码语言:javascript
复制
s = ['j', 'a', 'c', 'e']

生成的矩阵m2应该是

代码语言:javascript
复制
m2 = [ [1,3], ['a','c'] ]

不起作用的

我愚蠢的尝试一直在进行(这会产生错误/不起作用,而且对于许多列来说,可伸缩性更低):

代码语言:javascript
复制
m2 = [ [x, y] for x, y in m if y in s ]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-25 21:45:14

您可以通过zip m的行来标识第二项存在于s中的列,并再次对列进行zip以输出行:

代码语言:javascript
复制
list(zip(*(c for c in zip(*m) if c[1] in s)))

这将返回:

代码语言:javascript
复制
[(1, 3), ('a', 'c')]

如果需要输出为列表列表,则可以将zip生成的元组映射到list

代码语言:javascript
复制
list(map(list, list(zip(*(c for c in zip(*m) if c[1] in s)))))

这将返回:

代码语言:javascript
复制
[[1, 3], ['a', 'c']]

如果s中有许多项,您可以选择首先将s设置为一组,以提高查找效率。

代码语言:javascript
复制
s = set(s)
票数 2
EN

Stack Overflow用户

发布于 2019-02-25 21:49:46

试试这个:

代码语言:javascript
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54875036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档