首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找(start:end)子列表在列表中出现的位置。Python

查找(start:end)子列表在列表中出现的位置。Python
EN

Stack Overflow用户
提问于 2011-12-12 14:53:09
回答 2查看 1.3K关注 0票数 3

如果一个人有一长串数字:

代码语言:javascript
复制
example=['130','90','150','123','133','120','160','45','67','55','34']

和列表中的子列表,如

代码语言:javascript
复制
sub_lists=[['130','90','150'],['90','150'],['120','160','45','67']]

如何生成一个函数来获取这些子列表,并给出它们在原始字符串中出现的位置?要获得结果:

代码语言:javascript
复制
results=[[0-2],[1-2],[5-8]]

我在尝试一些类似的东西

代码语言:javascript
复制
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

但那不管用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-12 15:13:15

这应该可以处理几乎所有的情况,包括一个子列表出现多次:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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]
票数 3
EN

Stack Overflow用户

发布于 2011-12-12 15:00:26

这是可行的,但这只是因为我依赖于子列表存在于其内部的事实。

代码语言:javascript
复制
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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8470852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档