附加到列表以从列表中删除元素

时间:2012-12-19 18:48:28

标签: python list append

我正在测试列表如何在python中工作,我发现它非常令人困惑和令人沮丧。无论出于何种原因,我的代码都会收到不断的错误消息。

def listtest(list1,x):
    list2 = []
    count = 0
    for n in list1:
        if list1[count] == x:
            count += 1
        else:
            list2 = list.append(list2,list[count])
            count += 1
    return list2

无论出于何种原因,它要么告诉我list.append只接受一个令人困惑的论点。在交互窗口中,我可以使用两个参数调用append,例如list.append(list,3)或者其他什么,它可以完美地工作。我得到的另一个错误是

list2 = list.append(list2,list[count])
TypeError: 'type' object has no attribute '__getitem__'

这对我来说完全没有意义,也没有任何帮助。我的代码出了什么问题?为什么交互窗口的行为与其他窗口不同?为什么不像在交互窗口中那样追加工作?

4 个答案:

答案 0 :(得分:4)

编辑:经过一些仔细分析后重写:

您的直接问题是list[count] 应该 list1[count]。内置类型list无法编入索引(因为它是一种类型,而不是列表),因此您可以获得TypeError方法__getitem__()支撑。

但即使你写过list2 = list.append(list2,list1[count]),你仍然有问题。这行代码会做什么?

  1. list1[count]附加到list2。到目前为止,这么好。
  2. 将调用结果分配给list.append()list2。由于.append()是一种修改其就地调用的对象的方法,因此它始终返回None
  3. 现在list2None
  4. 下一次时间,您调用该行,您将获得另一个TypeError,因为您无法向NoneType个对象附加任何内容。
  5. 那么,你应该写的是

    list2.append(list1[count])
    

    虽然现在可行,但这是一种非常迂回的方式。跟踪你实际上并不需要的索引是非常单一的 - 语言比那更具表现力。不要尝试用Python编写Java程序。你的函数(如果你的目标确实是创建一个包含list1中与x相同的所有对象的新列表 - 我完全没有看到这一点)可以写成< / p>

    def listtest(list1, x):
        return [item for item in list1 if item == x]
    

    虽然这比简单写作

    更有用
    list1.count(x)
    

    为您提供x中显示的list1次。

答案 1 :(得分:2)

如果您要追加到list2,请使用list2.append(),而不是list.append()

答案 2 :(得分:1)

您的错误并非荒谬,他们试图指出您的根本问题。您不应将list用作变量名,因为list是内置类型。此外,当您尝试append到列表时,您只想传递一个参数。您append tuple可以这样:

myList.append(('val1', 'val2'))

答案 3 :(得分:-1)

您一次只能追加一个项目。您可以使用第二个列表的项目扩展()列表,这基本上意味着您将第二个列表的每个单独项目附加到第一个列表。这里有什么难以理解的?列表API记录清晰,清晰。