【发布时间】: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?
【问题讨论】:
这是在 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?
【问题讨论】:
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)
【讨论】:
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] [] 这样的切片
是否可以使用 itertools、filter 或其他东西将其转换为 oneliner?
这里是"somethng else",你可以使用index(subseq, seq) function:
index_of_y_in_x = index(y, x)
【讨论】: