加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在列表中查找特定的子列表

发布时间:2020-12-20 12:06:47 所属栏目:Python 来源:网络整理
导读:假设我们有以下列表: sequence = ['2','4','1','2','3','4']#indices 0 1 2 3 4 5 6 7 8 9 10 接下来,我们有以下列表: key_list = ['2','4'] 现在,我想从序列中提取所有可能的子列表,这些子列表保留了密钥列表的顺序,即其索引. 让我举例说明.因此,对于序列
假设我们有以下列表:

sequence = ['2','4','1','2','3','4']
#indices     0    1    2    3    4    5    6    7    8    9    10

接下来,我们有以下列表:

key_list = ['2','4']

现在,我想从序列中提取所有可能的子列表,这些子列表保留了密钥列表的顺序,即其索引.

让我举例说明.因此,对于序列,保留key_list顺序的所有可能的索引子列表是:

[0,3,5]
[0,7]
[0,9]
[0,10]

[0,6,8,10]

[3,7]
[3,9]
[3,10]

[6,9]
[6,10]

有什么建议?

编辑:我正在使用一个大数据集,我必须为文件的每一行执行此操作,所以我正在寻找一种非常优化的方法来做到这一点,通过避免蛮力方法(制作所有可能的序列组合)

附:我不知道问题的标题是否合适,如果您有更好的标题,请随时更改.

解决方法

它可能需要一些优化,也许比列表列表更好的结构,以避免我现在正在做的愚蠢的复制和插入,但我认为这应该在最糟糕的复杂性len(序列)^ 2(不确定)关于复杂性).

sequence = ['2','4']
key_list = ['2','4']

sub_lists = []
final_sub_lists = set()
len_key_list = len(key_list)

for index,value in enumerate(sequence):
    for sub_list in sub_lists:
        len_sub_list = len(sub_list)
        # Test if current value can continue the current sub list
        if len_sub_list < len_key_list and key_list[len_sub_list] == value:
            if len_sub_list == len_key_list - 1:
                # We have found a complete sub list
                final_sub_lists.add(tuple(sub_list + [index]))
            else:
                # We copy the current sub list to be sure not miss any sub lists
                # like for instance (6,9) and (6,10).
                sub_lists.insert(0,sub_list[:])
                sub_list.append(index)
    if key_list[0] == value:
        # Start a new sub list
        sub_lists.append([index])

print sorted(final_sub_lists)

说明:sub_lists是包含到目前为止匹配的索引的列表列表.当sub_list匹配key_list的所有值时,它将附加到set final_sub_lists.

它没有经过全面测试,所以请随意纠正或指出优化!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读