我正在尝试按其中的特定项目剪切列表,例如,我有一个这样的列表:
down = ["a", "b", "c", "d", "b", "e", "r"]
我想要的是:
[["a", "b"]["c", "d", "b"] ["e", "r"]]
在每次出现"b"
.
我写了这样的东西:
down = ["a", "b", "c", "d", "b", "e", "r"]
up = []
while down is not []:
up, down = up.append(down[:(down.index("b") + 1)]), down[(down.index("b") + 1):]
它抛出一个错误:
AttributeError: 'NoneType' object has no attribute 'append'
我无法弄清楚出了什么问题。
您收到错误是因为您将list.append()
函数的结果- 即None
-分配给up
了
up, down = up.append(down[: (down.index("b") + 1)]), down[...snipp...] # ^^^^^^^^ returns None
list.append
是一个返回的“就地”操作,None
因此up
将None
在下一次迭代中进行。
保持最接近你可以使用的东西
down = ["a", "b", "c", "d", "b", "e", "r"]
up = []
while 'b' in down:
b_index = down.index('b') + 1
up.append(down[:b_index])
down = down[b_index:]
up.append(down)
但在我看来,简单地迭代您的原始列表并将子列表组装在第二个列表中会更清晰:
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
因此它的性能比简单地迭代一次列表更差。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句