gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:10:59 27 4
gpt4 key购买 nike

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

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

生成另一个 k x m 矩阵 (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)

关于python:如果在另一个列表中匹配,则对嵌套列表进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54875036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com