[英]Python - How do I split a nested list into further list?
我有一个与此类似的嵌套列表,并按时间升序排序:
[[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10],
[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10],
[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10]]
每个列表中的第三项是0、1或10。0表示开始,1表示移动,而10表示结束。 我如何将其拆分为进一步的嵌套列表,以便最终得到类似于以下内容的旅程列表:
[[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]]]
可能还有更多的Python方式可以做到这一点,但这是功能性的,直接的并且应该易于遵循。 biglist
保存初始数据。
newlist = []
sublist = []
for i in biglist:
sublist.append(i)
if i[2] == 10:
newlist.append(sublist)
sublist = []
给出:
[[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]]]
#x is your initial list
k, new_list = 0, []
for i,j in enumerate(x):
if j[2] == 10:
new_list.append(x[k:i+1])
k = i+1
与其他解决方案相反,这里我们测试旅程是否开始( d[2] == 0
),而不是旅程何时结束:
output = []
for d in data:
if d[2] == 0:
# Starting a new journey: we add a new list
output.append([d])
else:
# Continuing a journey: we extend the last list
output[-1].extend([d])
当然,如果第一个旅程永远不会开始,这将失败(您将从else
语句中获得IndexError
)...
最明显的解决方案,如果我正确理解了这个问题:
def iter_journeys(lst):
for e in lst:
act = e[2]
if act == 0:
journey = []
journey.append(e)
if act == 10:
yield journey
我敢肯定有一种更有效的方法,但这是一个基本的解决方案:
def create_journeys(paths):
journeys = [[]]
for path in paths:
journeys[-1].append(path)
if path[-1] == 10:
journeys.append([])
return journeys
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.