查找子列表在列表中出现的(开始:结束)位置。python
如果有一个长长的数字列表:查找子列表在列表中出现的(开始:结束)位置。python,python,list,find,position,sublist,Python,List,Find,Position,Sublist,如果有一个长长的数字列表: example=['130','90','150','123','133','120','160','45','67','55','34'] 以及列表中的子列表,如 sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']] 如何生成接受这些子列表并给出它们在原始字符串中出现的位置的函数? 要获得结果,请执行以下操作: results=[[0-2],[1-2],[5-8]] 我在尝试一些
example=['130','90','150','123','133','120','160','45','67','55','34']
以及列表中的子列表,如
sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']]
如何生成接受这些子列表并给出它们在原始字符串中出现的位置的函数?
要获得结果,请执行以下操作:
results=[[0-2],[1-2],[5-8]]
我在尝试一些类似于
example=['130','90','150','123','133','120','160','45','67','55','34']
sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']]
for p in range(len(example)):
for lists in sub_lists:
if lists in example:
print p
但这不起作用吗?这是有效的,但这仅仅是因为我依赖于子列表存在于它们之间的事实
example=['130','90','150','123','133','120','160','45','67','55','34']
sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']]
def f(example, sub_lists) :
for l in sub_lists:
yield [example.index(l[0]),example.index(l[-1])]
print [x for x in f(example,sub_lists)]
>>> [[0, 2], [1, 2], [5, 8]]
这几乎可以处理任何情况,包括子列表多次出现:
example=['130','90','150','123','133','120','160','45','67','55','34']
sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']]
for i in range(len(example)):
for li in sub_lists:
length = len(li)
if example[i:i+length] == li:
print 'List %s has been matched at index [%d, %d]' % (li, i, i+length-1)
产出:
List ['130', '90', '150'] has been matched at index [0, 2]
List ['90', '150'] has been matched at index [1, 2]
List ['120', '160', '45', '67'] has been matched at index [5, 8]
我认为,
results=[[0-2]、[1-2]、[5-8]]
只是你自己的符号,用来说明你想要返回什么数字,如果你真的想得到一个字符串,你应该使用字符串替换。类似于return“result=[[[%d-%d],%d-%d…”“%()
。的可能重复项