Python 列表 append 问题

标签 python list append

今天我遇到了一个关于 python 列表追加的奇怪问题。我试图创建一个数组,其每个元素都类似于 C struct。这些元素之一就是一个单独的列表。这是有问题的代码:

class players:
    name='placeholder'
    squad=list()

teams=list()
teams.append(players())
teams.append(players())
teams[0].name="abc"
teams[1].name="xyz"
teams[0].squad.append("Joe")

for w in teams:
    print(w.name)
    print(w.squad)

我期望的输出是:

abc
['Joe']
xyz
[]

因为我只为 teams[0] 添加了一个成员到 squad。但我得到的输出是:

abc
['Joe']
xyz
['Joe']

名称设置正确,但 .append 将其 append 到 teams 的两个元素!

是什么原因造成的,我该如何解决?

最佳答案

原因是在你的类定义中,squadname是类变量,不是实例变量。当一个新的 player 对象被初始化时,它本质上是在播放器的所有实例之间共享相同的 squad 变量。相反,您想为 player 类定义一个 __init__ 方法,该方法显式分隔特定于实例的变量。

class players:
    def __init__(self):
        self.name = 'placeholder'
        self.squad = []

然后,当您初始化新的 player 对象时,它有自己的 squad 变量。您的其余代码现在应该可以正常工作,只有正确对象的 squad 被 append 到。

关于Python 列表 append 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36778970/

相关文章:

python - 需要 Anaconda 1.9.1 安装相关帮助

python - 当末尾没有换行符时,为什么打印输出不会立即显示在终端中?

r - 将列表转换为数据框

python - 我需要帮助按整数排序嵌套循环并显示它们

python - 从 CSV 文件 PYTHON 中读取列 block

javascript - 如何操作 append 内容? jQuery

python - 每次有新文档时,我需要帮助在列表中创建新列表时 append 文本文件中的单词

python - Python 有属性吗?

python - Python 的 pbkdf2_sha256.verify 的 NodeJS 实现

python - 需要帮助在列表的每个值之间插入值