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]]