假设我将n行x列-矩阵表示为嵌套的python列表,例如3行和2列:
m = [ [1,2,3], ['a', 'b', 'c'] ]这将是一种泛型和pythonic的方法来生成另一个k矩阵(k <= n),其中第二列中的值在序列中有匹配(即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 ]发布于 2019-02-25 21:45:14
您可以通过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)发布于 2019-02-25 21:49:46
试试这个:
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])https://stackoverflow.com/questions/54875036
复制相似问题