我有两个列表,其中一个是:
lst = [">ctgxxxx1/n", "aatttata", ">ctgxxxx2/n", "attggag", ">ctgxxxx3/n", "ggagttata"]
和另一个表单
ATP6 = [ ">ctgxxxx1/n", ">ctgxxxx3/n"]
对于lst
中ATP6
中也可以找到lst
中的每个项目,我想追加" ATP6"到lst = [">ctgxxxx1ATP6/n", "aatttata", ">ctgxxxx2/n", "attggag", ">ctgxxxx3ATP6/n", "ggagttata"]
中项目的末尾。在这个例子中,我希望代码的输出为:
for x in lst:
if x.startswith(">"):
if x in ATP6:
x = x+"ATP6"
目前我有以下代码:
{{1}}然而,这并没有任何影响。
我认为它不起作用,因为我有一个嵌套的if语句,但我不确定。除了答案,我可以解释为什么我的代码无法帮助我学习。三江源!
答案 0 :(得分:2)
您的代码无法执行您想要的操作,因为您尝试在循环中修改不可变类型(字符串)。这将创建一个新对象,而不是更改sting。
我使用列表理解:
>>> lst = [lstitem+'ATP6' if lstitem in ATP6 else lstitem for lstitem in lst]
的产率:
['>ctgxxxx1/nATP6',
'aatttata',
'>ctgxxxx2/n',
'attggag',
'>ctgxxxx3/nATP6',
'ggagttata']
答案 1 :(得分:0)
您的问题,如评论中所述,是因为您正在修改数组中元素的副本,而不是原始副本。 此外,您可以将代码缩短为更加pythonic列表理解,如下所示:
lst = [x+'ATP6' if x in ATP6 else x for x in lst]