Список целых чисел в строку с использованием классов

#python #list #class

#python #Список #класс

Вопрос:

Я хочу написать класс для векторов, и мне нужно иметь возможность преобразовывать целые числа в списке в строку и печатать их.

Пример: [1,2.5] —> «<1,2.5>»

Это то, что я придумал, но оно не работает, любая помощь будет оценена.

 class Vector(list):
def __init__(self,other):
    assert len(other)!=0, "Invalid Input!"
    for e in other:
        assert type(e)==int or type(e)==float, "Invalid Input!"
    list.__init__(self,other)
def __str__(self):
    s = ''
    for x in range (len(self)):
        s   = str(self.x)
    return s
  

Комментарии:

1. s = str(self.x) может быть, должно быть s = str(self.x) ? (нет пробела между и =)

2. Какую ошибку вы получаете?

3. Пожалуйста, исправьте отступ. Пробелы очень важны в Python.

4. @MadPhysicist Извините, в python это правильно, когда я копирую вставку сюда, это выглядит так.

5. Пожалуйста, исправьте это здесь. И опубликуйте свою ошибку. У вашего класса нет атрибута x

Ответ №1:

Используйте функцию объединения, чтобы объединить себя.

 def __str__(self):
    return "<%s>" % ", ".join(self)
  

Join в основном возвращает строку содержимого списка, разделенную запятой и пробелом. Затем мы помещаем угловые скобки в строку, с которой мы ее объединяем.

Комментарии:

1. Привет! Спасибо за ответ. Я получаю эту ошибку при реализации вашего кода: элемент последовательности 0: ожидаемый экземпляр str, найден int

2. Использование return f"<%s>" % ", ".join(map(str, self))

3. Вы потрясающие: 3 Спасибо!

4. В наши дни обычно предпочтительнее использовать оператор %.string.format() .

Ответ №2:

Другой вариант с использованием f -strings

 def __str__(self):
    return(f'<{super().__str__()[1:-1]}>')