Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python检索列表中标记之间的嵌套值列表_Python_List_Slice - Fatal编程技术网

Python检索列表中标记之间的嵌套值列表

Python检索列表中标记之间的嵌套值列表,python,list,slice,Python,List,Slice,我有一份清单: [2,3,5,"TAG",6,7,3,2,6,"TAG",9,9,8,3] 我想返回一个列表,其中包含位于“标记”之间的值的嵌套子列表 因此,生成的列表如下所示: [[2,3,5], [6,7,3,2,6], [9,9,8,3]] 我在下面创建了一个方法,试图实现这一点,但不起作用: def returnListBetweenTag(lst, tag): temp = [] k = lst.index(tag) while lst != []: tem

我有一份清单:

[2,3,5,"TAG",6,7,3,2,6,"TAG",9,9,8,3]
我想返回一个列表,其中包含位于“标记”之间的值的嵌套子列表

因此,生成的列表如下所示:

[[2,3,5], [6,7,3,2,6], [9,9,8,3]]
我在下面创建了一个方法,试图实现这一点,但不起作用:

def returnListBetweenTag(lst, tag):
  temp = []
  k = lst.index(tag)
  while lst != []:
      temp.append(lst[0:k])
      del lst[0:k+1]
  return temp
这将打印出:

[[2, 3, 5], [6, 7, 3], [6, 'TAG', 9], [8, 3]]

有谁能帮我理解我做错了什么,以及一些解决问题的建议吗?

当使用like时,这是相当直截了当的:

代码: 测试代码: 结果:
这确实不是一个好方法,但你可以让它工作

首先,在第一次之后,您永远不会再执行
k=lst.index(标记)
。 因此,在您的列表中,
k
将永远是3。但是你一直把前三个元素从列表中去掉,所以第一个
k[0:3]
[2,3,5]
,然后是
[6,7,3]
,然后是3,
[6',TAG',9]
,依此类推。你每次都得打电话

第二,当列表中没有更多的
'TAG'
时会发生什么?该
lst.index
将引发异常。所以你需要处理这个问题

def returnListBetweenTag(lst, tag):
    temp = []
    while lst != []:
        try:
            k = lst.index(tag)
        except ValueError:
            temp.append(lst)
            break
        temp.append(lst[0:k])
        del lst[0:k+1]
    return temp

这里有一种方法可以通过以下方式实现这一点

这也可以理解为:

ls = [list(group) for key, group in groupby(lst, lambda x: x != "TAG") if key]

逻辑只是跟踪“TAG”关键字,当它被找到时,清空临时列表并再次从索引0开始添加

这将对您有用:

data=[2,3,5,"TAG",6,7,3,2,6,"TAG",9,9,8,3]

def values(datae):
    final_values=[]
    store=[]
    for i in data:
        if i!='TAG':
            store.append(i)
        else:
            final_values.append(store)
            store=[]

    final_values.append(store)

    return final_values
print(values(data))
输出:

def returnListBetweenTag(lst, tag):
    temp = []
    while lst != []:
        try:
            k = lst.index(tag)
        except ValueError:
            temp.append(lst)
            break
        temp.append(lst[0:k])
        del lst[0:k+1]
    return temp
from itertools import groupby

ls = []

for key, group in groupby(lst, lambda x: x != "TAG"):
    if key:
        ls.append(list(group))

print ls
# [[2, 3, 5], [6, 7, 3, 2, 6], [9, 9, 8, 3]]
ls = [list(group) for key, group in groupby(lst, lambda x: x != "TAG") if key]
data=[2,3,5,"TAG",6,7,3,2,6,"TAG",9,9,8,3]

def values(datae):
    final_values=[]
    store=[]
    for i in data:
        if i!='TAG':
            store.append(i)
        else:
            final_values.append(store)
            store=[]

    final_values.append(store)

    return final_values
print(values(data))
[[2, 3, 5], [6, 7, 3, 2, 6], [9, 9, 8, 3]]