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

在python中为给定值返回唯一索引

  •  2
  • ThomasJohnson  · 技术社区  · 7 年前

    我有一个列表,需要根据给定的唯一值提取所有元素的索引号。

    如果我申请:

    test3 = ["P3","P35","P35","P3","P2"]
    actual_state = "P3"
    indexes = [n for n, x in enumerate(test3) if actual_state in x]
    

    这将返回:

    [0, 1, 2, ,3]
    

    但输出应为:

    [0, 3]
    

    P3也存在于P35中,重命名P35不会有帮助,因为我有数千个输入的嵌套列表,有什么建议吗?如何以所需的方式提取?谢谢

    2 回复  |  直到 7 年前
        1
  •  3
  •   jezrael    7 年前

    改变 in == 因为 在里面 测试子字符串还包括:

    indexes = [n for n, x in enumerate(test3) if actual_state == x]
    print (indexes)
    [0, 3]
    
        2
  •  1
  •   RoadRunner    7 年前

    您也可以使用 collections.defaultdict() 要对唯一字符串的索引进行分组,只需访问 actual_state :

    from collections import defaultdict
    
    test3 = ["P3","P35","P35","P3","P2"]
    actual_state = "P3"
    
    d = defaultdict(list)
    for i, test in enumerate(test3):
        d[test].append(i)
    
    print(d[actual_state])
    # [0, 3]