自动创建列表

时间:2016-09-28 09:51:14

标签: python python-3.x

我正在尝试自动创建以下列表:

[Slot('1A', '0', 0), Slot('2A', '0', 0),
 Slot('1B', '0', 0], Slot ('2B,'0', 0), ....]

将slot定义为:

class Slot:
    def __init__(self, address , card, stat):
        self.address = address
        self.card = card
        self.stat = stat


board = []
for i in range(1, 13):
    for j in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']:
        board.append(Slot ((str(i)+j,'0', 0)))
print(board)

在Windows中使用Python 3.5。怎么了?我怎么能这样做?感谢。

2 个答案:

答案 0 :(得分:2)

您已将Slot中的所有参数括在一个括号中,从而将一个参数传递给__init__,该参数需要三个(以及TypeError提出的提示。删除不必要的括号组:

board.append(Slot(str(i)+j,'0', 0))

它工作正常。

作为附录,print(board)会返回一个非常不愉快的对象视图,我建议重载__str____repr__以更好地查看已创建的对象:

class Slot:
    def __init__(self, address , card, stat):
        self.address = address
        self.card = card
        self.stat = stat

    def __str__(self):
        return "Slot: ({0}, {1}, {2})".format(self.address, self.card, self.stat)

    def __repr__(self):
        return str(self)

现在print(board)打印:

print(board)
[Slot: (1A, 0, 0), Slot: (1B, 0, 0),..., Slot: (12H, 0, 0), Slot: (12I, 0, 0)]

答案 1 :(得分:0)

您正在将单个元组传递给构造函数。如果删除括号,则代码为黄金。

From:
board.append(Slot ((str(i)+j,'0', 0)))
To:
board.append(Slot(str(i)+j,'0', 0))