Вы можете выполнить итерации своего оригинала и собрать подсписки во втором списке:
k = ["a", "b", "c", "d", "b", "e", "r"]
result = [[]]
for e in k:
if e != "b":
result[-1].append(e)
else:
result[-1].append(e)
result.append([])
if result[-1] == []:
result.pop() # thx iBug's comment
print(result) # [['a', 'b'], ['c', 'd', 'b'], ['e', 'r']]
Я думаю, это намного яснее, чем то, что пытается сделать ваш код - ваше "то, что я хочу ["a", "b"]["c", "d", "b"] ["e", "r"]
"недопустимый python.
Немного менее производительный код будет выглядеть так:
k = ["a", "b", "c", "d", "b", "e", "r"]
b = []
while True:
try:
b_idx = k.index("b")
except:
b.append(k)
break
else:
b,k = b+[k[:b_idx+1]],k[b_idx+1:]
print(b)
Но вам нужно далеко искать в вашем списке через .index()
и try: except
, поэтому он имеетхуже, чем просто повторять список один раз.