代码之家  ›  专栏  ›  技术社区  ›  user3375672

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

  •  0
  • user3375672  · 技术社区  · 5 年前

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

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

    m ).

    s = ['j', 'a', 'c', 'e']
    

    结果矩阵 m2 应该是

    m2 = [ [1,3], ['a','c'] ]
    

    我愚蠢的尝试是(它生成错误/不起作用,并且对许多列的伸缩性较差):

    m2 = [ [x, y] for x, y in m if y in s ]
    
    2 回复  |  直到 5 年前
        1
  •  2
  •   blhsing    5 年前

    你可以 zip m s 拉链

    list(zip(*(c for c in zip(*m) if c[1] in s)))
    

    这将返回:

    [(1, 3), ('a', 'c')]
    

    拉链 list

    list(map(list, list(zip(*(c for c in zip(*m) if c[1] in s)))))
    

    这将返回:

    [[1, 3], ['a', 'c']]
    

    你可以选择 如果中有许多项,则首先设置以提高查找效率 s :

    s = set(s)
    
        2
  •  0
  •   Heyran.rs    5 年前

    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])