分割对象列表

时间:2018-08-13 10:27:46

标签: python slice

我有班级卡:

class Card:

    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit
        self.value = VALUES[self.rank]
    def __str__(self):
        return f'{self.rank} of {self.suit} with value of {self.value}'

我正在创建一个list

 ls = [Card('Nine','Diamonds'),Card('Ten','Diamonds'),Card('Eight','Diamonds')]

当我打印时:

 print(ls[1:])

我得到:

  

[卡对象位于0x000001884AAF3400,卡对象位于0x000001884AB147B8]

如我所读,我应该实现:

def __getitem__:

但我不确定如何。

期望的输出是带有卡片对象的字符串表示形式的列表。

1 个答案:

答案 0 :(得分:0)

好吧,如果您有一个Card对象列表并对其进行切片,您仍然会得到一个(也许较小的)Card对象列表。如果您在交互式Python提示符下,则可能输入了$scope.options = [{ 0 : [{Selected: false, val: "red"}, {Selected: true, val:"Black"}, {Selected: false, val:"Pink"}]}, { 1 : [{ Selected: false, val: "2" }, { Selected: true, val: "1" }]}]; $scope.choices = []; for(var i = 0; i < Object.keys($scope.options).length; i++){ var keys = Object.keys($scope.options); $scope.choices.push({ Id: keys[i], Value: $scope.options[i][keys[i]].find(function(x){ return x.Selected == true }).val }); } 之类的内容,并获得了这些[card object at ...,]之类的东西。这是因为当您在提示符下键入某些内容时-或者如果您执行my_list[1:7],Python会将其理解为print (something)。如果它是一个字符串,它将只打印它,但是不是。由于定义了 str 方法,因此可以执行以下操作:

print( repr(something) )

这将为您提供更好的显示效果,每个列表项都可以通过slice = cards[1:7] slice_strings = [ str(card) for card in slice ] print (slice_strings) 方法转换为字符串。

您还可以定义自己的__str__()方法-最好的方法是使其返回类似于__repr__()对象构造函数的内容,例如:

Card

然后,进行def __repr__(self): return f'Card({self.rank},{self.suit})' 会得到更令人满意的结果。