如果在另一个列表中找到它,则将字符附加到列表项

时间:2014-04-30 15:20:34

标签: python list append

我有两个列表,其中一个是:

lst = [">ctgxxxx1/n", "aatttata", ">ctgxxxx2/n", "attggag", ">ctgxxxx3/n", "ggagttata"]

和另一个表单

ATP6 = [ ">ctgxxxx1/n", ">ctgxxxx3/n"]

对于lstATP6中也可以找到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语句,但我不确定。除了答案,我可以解释为什么我的代码无法帮助我学习。三江源!

2 个答案:

答案 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]