我有一个列表列表:
[[0, 0], [0, 0], [0, 0], [0, 1, 0], [0, 0]]
我想将其拆分为列表[0,1,0]之前的内容和之后的内容:
[[0, 0], [0, 0], [0, 0]], [[0, 0]]
如果我有一个列表:
[[0, 0], [0, 0], [0, 0], [0, 1, 0], [0, 0], [0, 1, 0], [0, 0]]
我想将其分成这样的列表:
[[0, 0], [0, 0], [0, 0]], [[0, 0]], [[0, 0]]
我确实受制于while循环,似乎并没有在正确的位置重置临时列表:
def count_normal_jumps(jumps):
_temp1 = []
normal_jumps = []
jump_index = 0
while jump_index <= len(jumps) - 1:
if jumps[jump_index] == [0,0]:
_temp1.append(jumps[jump_index])
else:
normal_jumps.append(_temp1)
_temp1[:] = []
jump_index += 1
return normal_jumps
为什么这不起作用,有没有更好的方法?
答案 0 :(得分:2)
您可以使用for
循环将列表中的子列表追加到列表列表中的最后一个子列表,并在输入子列表等于{{1 }}:
[0, 1, 0]
或者您可以使用def split(lst):
output = [[]]
for l in lst:
if l == [0, 1, 0]:
output.append([])
else:
output[-1].append(l)
return output
:
itertools.groupby
这样:
from itertools import groupby
def split(lst):
return [list(g) for k, g in groupby(lst, key=[0, 1, 0].__ne__) if k]
输出:
print(split([[0, 0], [0, 0], [0, 0], [0, 1, 0], [0, 0]]))
print(split([[0, 0], [0, 0], [0, 0], [0, 1, 0], [0, 0], [0, 1, 0], [0, 0]]))
答案 1 :(得分:0)
您可以执行以下操作:
myList = [[0, 0], [0, 0], [0, 0], [0, 1, 0], [0, 0]]
toMatch = [0, 1, 0]
allMatches = []
currentMatches = []
for lst in myList:
if lst == toMatch:
allMatches.append(currentMatches)
currentMatches = []
else:
currentMatches.append(lst)
#push leftovers when end is reached
if currentMatches:
allMatches.append(currentMatches)
print(allMatches)