【问题标题】:Trying to recreate a __str__() method in python试图在 python 中重新创建一个 __str__() 方法
【发布时间】:2017-09-26 23:11:49
【问题描述】:

我的任务是尝试为 python 重新创建 ArrayList 类型的方法。除了 str 和 repr 函数之外,我已经成功地重新创建了所有内容,但是由于它们的行为基本相同,因此我只需要一个帮助。下面是我的方法代码,但我不断收到类型错误,说明“只能加入可迭代”

def __str__(self):
    """Implements `str(self)`. Returns '[]' if the list is empty, else
    returns `str(x)` for all values `x` in this list, separated by commas
    and enclosed by square brackets. E.g., for a list containing values
    1, 2 and 3, returns '[1, 2, 3]'."""
    str= '['
    if len(self.data)>0:
        for i in range(len(self.data)):
            if i ==0:
                str1 = str+''.join(self[i])
            else:
                str1 = str+','+ ''.join(self[i])
        return str1+']'
    else:
        return '[]'

所有这些只有一个问题,那就是我只能调用以下方法来提供帮助,尽管这不应该成为此方法的限制。请帮忙!

方法: lst[i] 用于在现有的正索引 i 处获取和设置值

len(lst) 获取槽数

lst.append(None) 以 %time 将列表增加一个槽

del lst[len(lst)-1] 删除列表中的最后一个槽

【问题讨论】:

  • 你认为''.join 是做什么的?你为什么要打电话给''.join(self[i])
  • 我的印象是它会添加到字符串中。我正在尝试对数组列表进行字符串化...
  • + 添加到字符串。 ''.join 接受一个整个序列的字符串并将它们加在一起。你传递给它一个 int。
  • 嗯,所以你说我可以只拥有 str = str + self[i] + ',' 我想错了不是我
  • 您需要自己通过在元素上调用 str 来对元素进行字符串化(或者至少,您的文档字符串说调用 str - repr 是通常的选择),并且您只需要+join 之一。 join 是一个更安全的选择 - 构建一个字符串列表以连接在一起,然后将它们连接起来。 + 对性能有危险; + 很容易得到二次运行时。

标签: python python-3.x arraylist


【解决方案1】:

关键是你可以在列表的元素上使用str();因为你的__str__() 没有调用str(self),所以你不会有无限递归。

这是一种方法。

#UNTESTED
def __str__(self):
    """Implements `str(self)`. Returns '[]' if the list is empty, else
    returns `str(x)` for all values `x` in this list, separated by commas
    and enclosed by square brackets. E.g., for a list containing values
    1, 2 and 3, returns '[1, 2, 3]'."""

    # Assuming that SELF implements iteration
    return '[' + ', '.join(str(x) for x in self) + ']'

    # Assuming that iteration isn't implemented
    return '[' + ', '.join(str(self[i]) for i in range(len(self))) + ']'

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2014-09-01
    • 1970-01-01
    • 2017-10-08
    • 2013-12-13
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多