【问题标题】:Python: Find index of fist list in list onelinerPython:在列表一个衬里中查找第一个列表的索引
【发布时间】:2014-12-25 21:16:21
【问题描述】:

这是在 x 大列表中查找 y 列表索引的解决方案

def getsubidx(x, y):
    l1, l2 = len(x), len(y)
    for i in range(l1):
        if x[i:i+l2] == y:
            return i

是否可以使用 itertools、filter 或其他东西将其转换为 oneliner?

【问题讨论】:

    标签: python list find


    【解决方案1】:
    def getsubidx(x, y):
        return next(i for i in range(len(x)) if x[i:i+len(y)] == y)
    

    如果不匹配,您可能希望引发错误,如果不匹配,您可以返回-1

    return next((i for i in range(len(x)) if x[i:i+len(y)] == y), -1)
    

    【讨论】:

    • 我假设 OP 想要一个错误,如果 OP 不是 -1 可以是默认值
    【解决方案2】:
    def getsubidx(x, y):
        l1, l2 = len(x), len(y)
        for i in range(l1-l2):   here it should be l1-l2
            if x[i:i+l2] == y:        here you may get list out of index
                return i
    

    一个班轮:

    def getsubidx(x, y):
        return [i for i in range(len(x)-len(y)) if x[i:i+len(y)] == y]
    

    【讨论】:

    • 这会找到列表中的每个索引,而不是问题显示的内容
    • 另外,您也不会永远从索引中获取列表,以获取像 >>> [][9000:9001] [] 这样的切片
    【解决方案3】:

    是否可以使用 itertools、filter 或其他东西将其转换为 oneliner?

    这里是"somethng else",你可以使用index(subseq, seq) function:

    index_of_y_in_x = index(y, x) 
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 2015-01-11
      • 2019-10-10
      • 2016-11-08
      • 1970-01-01
      • 2010-10-06
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多