我必须搜索列表中的所有元素,并用另一个元素替换一个元素的所有匹配项。最好的方法是什么?你知道吗
例如,假设我的列表包含以下元素:
data = ['a34b3f8b22783cf748d8ec99b651ddf35204d40c',
'baa6cb4298d90db1c375c63ee28733eb144b7266',
'CommitTest.txt',
'=>',
'text/CommitTest.txt',
'0',
'README.md',
'=>',
'text/README.md',
'0']
我需要用字符“=>;”前后元素的组合值替换所有出现的字符“=>;”,因此我需要的输出是:
data = ['a34b3f8b22783cf748d8ec99b651ddf35204d40c',
'baa6cb4298d90db1c375c63ee28733eb144b7266',
'CommitTest.txt=>text/CommitTest.txt',
'0',
'README.md=>text/README.md',
'0']
这是我迄今为止写的代码:
ind = data.index("=>")
item_to_replace = data[ind]
combine = data[ind-1]+data[ind]+data[ind+1]
replacement_value = combine
indices_to_replace = [i for i,x in enumerate(data) if x==item_to_replace]
for i in indices_to_replace:
data[i] = replacement_value
data
但是,不需要的输出如下所示:
data = ['a34b3f8b22783cf748d8ec99b651ddf35204d40c',
'baa6cb4298d90db1c375c63ee28733eb144b7266',
'CommitTest.txt',
'CommitTest.txt=>text/CommitTest.txt',
'text/CommitTest.txt',
'0',
'README.md',
'CommitTest.txt=>text/CommitTest.txt',
'text/README.md',
'0']
有更好的办法吗?你知道吗
正如@alpha_所建议的,首先找到
=>
元素的索引并替换每一个发生的元素,希望这能有所帮助你的一般算法是正确的。你知道吗
但是,数据索引(“->;”)将只查找“->;”第一次出现的索引。你知道吗
您需要找到所有出现的“=>;”将其存储在一个列表中,合并元素并替换每个出现的元素。你知道吗
要查找“=>;”的所有出现的索引,可以使用:
有人正确地指出,
data.index
只返回元素第一次出现的索引。此外,代码不会删除"=>"
之后和之前的条目。你知道吗对于改变列表的解决方案,可以使用
del
,但我建议使用Python提供的这种整洁的切片语法。你知道吗我还建议您尝试在一次传递中生成一个新列表的实现。改变列表可能是一种不好的做法,与创建这样的新列表相比没有真正的优势。你知道吗
相关问题 更多 >
编程相关推荐