【问题标题】:how to get all the indicesr when '"fo"','"ba"' appear together. in Python?当'“do”','“ba”'一起出现时如何获取所有索引。在 Python 中?
【发布时间】:2017-09-28 00:30:15
【问题描述】:

对于列表列表 ['"fo"', '"ba"', '1','2','ect.','"fo"', '"ba"','ect.','57','"trip"'] ,当 '"fo"'、'"ba"' 一起出现在列表中时,获取 '"fo"' 的所有索引的最简洁方法是什么。在 Python 中?

类似于为 1 项编辑的一项,由 MrWonderful 于 2014 年 12 月 30 日 21:03 回答和 7 月 28 日 21:30 编辑 对于列表 ["foo", "bar", "baz"] 和列表“bar”中的项目,在 Python 中获取其索引 (1) 的最简洁方法是什么?

【问题讨论】:

    标签: python list function indices


    【解决方案1】:

    如果您正在寻找 '"fo"' 后跟 '"ba"',类似

    import itertools
    
    l = ['"fo"', '"ba"', '1','2','ect.','"fo"', '"ba"','ect.','57','"trip"']
    print([i for i, x in enumerate(zip(l, itertools.islice(l, 1, None))) if x == ('"fo"', '"ba"')])
    

    【讨论】:

    • 好的——这看起来很适合我现在想做的事情。它给了我一个包含 80 多个指标的列表,它应该是什么。我需要学习如何查找 itertools 和 random 和其他模块以及如何使用它们。再次感谢。
    【解决方案2】:

    应该这样做:

    for one_list in list_of_lists:
        if ("fo" in one_list ) and ("ba" in one_list):
            return indices = [i for i, x in enumerate(one_list) if x == "fo"]
    

    【讨论】:

    • 我是新手。这就是我一直在尝试的。我发现有些东西会给 1 个列表的索引,我让它工作。现在我希望它搜索两个列表一起出现的实例。这就是我正在尝试的。
    • def indices(l, val): """总是返回一个包含 val 在 the_list 中的索引的列表""" retval = [] last = 0 while val in l[last:]: i = l[last:].index(val) #finds index last item in list if l[i+1] == date: print(l[last]) print(l[last+1]) retval.append(last + i) last += i + 1 elif l[i+1] != date: last += i return retval
    • l = no_spaces q = ('"EMD"') date =('"20170820"') print (indices(l,q)) print (indices(l,'"EMD"') ) 我尝试了 kogito 的解决方案并不断获取文件“c:\code\testing.py”,第 16 行返回索引 = [i for i, x in enumerate(one_list) if x == no_spaces[0]] ^ SyntaxError: invalid syntax谢谢大家,我也想试试 patrick 和 windmill 的帖子,看看我能不能把它们加入我的程序。
    • 请正确格式化您的 cmets,以便我们回复您。
    【解决方案3】:

    你可以试试这个!我们遍历列表一次,检查我们所在的索引和下一个索引是否与您想要的匹配。如果是,我们将其添加到列表中。我们还检查我们是否不在列表的最后一个索引上,以避免 indexOutOfBounds 异常。

    results = []
    for i in range(0, len(lst)):
        if i < len(lst)-1 and lst[i] == '"fo"' and lst[i+1] == '"ba"':
            results.append(i)
    return results
    

    请注意,这适用于您的示例,它看起来是单个列表而不是列表列表。要应用于列表列表,您可以通过每个子列表添加额外的 for 循环迭代。

    【讨论】:

      【解决方案4】:

      这就是我最终的结果。我改编了 Patrick Haugh 的回答。

      import itertools         # C-D    create list of indices    
      r_va=('"EMD"', '"20170820"')
      L = ([i for i, x in enumerate(zip(l, itertools.islice(l, 1, None))) if \
      x == (r_va)])
      e =(len(l))
      L.append(e)    # adds end length of no_spaces   L is list of indexes of l
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多