分享
三行代码  ›  专栏  ›  技术社区  ›  AdamA

根据索引和值列表筛选元组列表的最快方法是什么?

  •  0
  • AdamA  · 技术社区  · 2 天前

    seq = [(1,2,3,4) , (1,2,4,3) (1,3,2,4) (1,3,4,2)]

    以及另一个包含元组的列表 (index , value) 索引及其相应值如下: pos = [(3 , 4) , (1 , 2)]

    我如何过滤seq列表,去掉所有的元组 不要 中相应索引中的值 pos 例如,如果我有上面的seq和pos变量,结果将是: [(1,2,3,4)] 因为它是唯一在索引1中有2,在索引3中有4的序列。

    for i in range(len(seq)):
        for j in range(len(seq)):
            for x in range(len(pos)):
                if j == pos[x][0] and seq[i][j] == pos[x][1]:
                    res.append(temp[i])
    
    2 回复  |  直到 2 天前
        1
  •  3
  •   Aplet123    2 天前

    你可以使用 all 功能:

    seq = [(1,2,3,4), (1,2,4,3), (1,3,2,4), (1,3,4,2)]
    pos = [(3, 4), (1, 2)]
    filtered = [x for x in seq if all(x[i] == v for i, v in pos)]
    print(filtered) # [(1, 2, 3, 4)]
    
        2
  •  0
  •   tdelaney    2 天前

    你可以用 pandas 全部的 的值为真。

    import pandas as pd
    
    seq = [(1,2,3,4), (1,2,4,3), (1,3,2,4), (1,3,4,2)]
    pos = [(3 , 4) , (1 , 2)]
    
    seq_df = pd.DataFrame(seq)
    filter_df = seq_df[[i for i,_ in pos]] == [v for _,v in pos]
    final_df = seq_df[filter_df.all(axis=1)]