Как перебирать Tuple<List<String>> в Python

class App:
    def filter(*input):
        result = []
        print(type(input))
        for arrayOfColors in input:
            print(type(arrayOfColors))
            goodColors = getGoodColors(arrayOfColors)
            result.add(goodColors)
        return result

def getGoodColors(arrayOfColors):
    setOfNotGoodColors = ["gray", "yellow", "purple"]
    goodColors = []
    for color in arrayOfColors:
        if color not in setOfNotGoodColors:
            goodColors.add(color)
    return goodColors
        
app = App()
app.filter(["blue", "red"], ["gray","blue"])

Результат компиляции:

<class '__main__.App'>
Traceback (most recent call last):
  File "<string>", line 20, in <module>
File "<string>", line 7, in filter
  File "<string>", line 14, in getGoodColors
TypeError: 'App' object is not iterable

Как избавиться от этой ошибки? Мне нужно написать больше не кодовых символов, пожалуйста, помогите.

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

Raguel 14.12.2020 14:02
input — это имя встроенной функции Python. Не используйте его в качестве имени переменной.
balderman 14.12.2020 14:02

Добро пожаловать в Stack Overflow! Пожалуйста, прочитайте о Как отлаживать небольшие программы . Вы также можете использовать Python-Tutor, который помогает визуализировать выполнение кода шаг за шагом.

Tomerikoo 14.12.2020 14:04

Используйте def filter(self, *input): обратите внимание на отсутствующий self. Но здесь больше неправильно.

user2390182 14.12.2020 14:04

тоже list.append нет list.add()

JacksonPro 14.12.2020 14:05
filter что вы используете точки для фильтра python - programiz.com/python-programming/methods/built-in/filter
balderman 14.12.2020 14:05

добавление собственного параметра и метода изменения вместо добавления помогает скомпилировать файл :)

KamilH 14.12.2020 15:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете увидеть проблему, если добавите print(input) прямо под def filter(*input):; вот увидишь

(<__main__.App object at 0x00000211E39C0A48>, ['blue', 'red'], ['gray', 'blue'])

Это результат self в каждом классе. Вы можете избежать этого в своем цикле for с помощью кусочка [1:]. Кроме того, у питона list нет атрибута add; они называются append:

class App:
    def filter(*input):
        result = []
        for arrayOfColors in input[1:]:
            goodColors = getGoodColors(arrayOfColors)
            result.append(goodColors)
        return result

def getGoodColors(arrayOfColors):
    setOfNotGoodColors = ["gray", "yellow", "purple"]
    goodColors = []
    for color in arrayOfColors:
        if color not in setOfNotGoodColors:
            goodColors.append(color)
    return goodColors
        
app = App()
app.filter(["blue", "red"], ["gray","blue"])

Обратите внимание, что это плохая практика называть ваши переменные именами, которые используются встроенными модулями, поэтому переменную input лучше назвать my_input.

Ответ принят как подходящий

Внутри класса Python каждый метод должен иметь параметр self, например:

class App:
    def filter(self, *input):

с параметром self вы можете получить доступ к свойствам этого экземпляра.

другая проблема: чтобы добавить значение в список python, вам нужно использовать функцию append, например:

goodColors.append(color)

Ваш окончательный код должен выглядеть примерно так:

class App:
    def filter(self, *input):
        result = []
        print(type(input))
        for arrayOfColors in input:
            print(type(arrayOfColors))
            goodColors = getGoodColors(arrayOfColors)
            result.append(goodColors)
        return result

def getGoodColors(arrayOfColors):
    setOfNotGoodColors = ["gray", "yellow", "purple"]
    goodColors = []
    for color in arrayOfColors:
        if color not in setOfNotGoodColors:
            goodColors.append(color)
    return goodColors
        
app = App()
app.filter(["blue", "red"], ["gray","blue"])

Примечание. Вы не должны использовать введенное имя в качестве параметра, потому что это имя встроенной функции, но код работает, даже если вы его используете, поэтому я не стал его исправлять.

Другие вопросы по теме