我正在测试列表如何在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__'
这对我来说完全没有意义,也没有任何帮助。我的代码出了什么问题?为什么交互窗口的行为与其他窗口不同?为什么不像在交互窗口中那样追加工作?
答案 0 :(得分:4)
编辑:经过一些仔细分析后重写:
您的直接问题是list[count]
应该 list1[count]
。内置类型list
无法编入索引(因为它是一种类型,而不是列表),因此您可以获得TypeError
方法__getitem__()
支撑。
但即使你写过list2 = list.append(list2,list1[count])
,你仍然有问题。这行代码会做什么?
list1[count]
附加到list2
。到目前为止,这么好。list.append()
至list2
。由于.append()
是一种修改其就地调用的对象的方法,因此它始终返回None
。list2
是None
。TypeError
,因为您无法向NoneType
个对象附加任何内容。那么,你应该写的是
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记录清晰,清晰。