Как проверить все значения объектов в функции python

Я хотел бы проверить все значения x в этой функции, не вызывая каждое значение x ( x[0] ...), таким образом, что-то вроде x[n] или ' for all values of x'. И перечислить все значения TickerZ в списке в зависимости от того, прошло ли значение x оператор IF.

        room = str('Bingo Bango Bungo EURUSD=X')

        x = room.split()
        def Symbol(symbol):
            aapl = yf.Ticker(symbol)
            ainfo = aapl.history(period='1y')
            if len(ainfo) >= 40:
                print('yes it is a symbol')
                global tickerZ
                tickerZ = symbol
                new_Memory = Memory.objects.create(user=current_user, raw_message=room, date1=datemin, date2=datemax, ticker=tickerZ, command=cmd_exec)
                new_Memory.save()
                return tickerZ
                
        symb1 = Symbol(x[0])
        symb2 = Symbol(x[1])
        symb3 = Symbol(x[2])
        symb4 = Symbol(x[3])

Объяснение кода: В общем, у меня есть строка, я разбиваю ее на слова, которые представляют все значения x. В данном случае x[0] - это Bingo. Я передаю все x в оператор IF, чтобы отфильтровать соответствующие значения x. Я знаю, является ли x релевантным, если TickerZ имеет значение, потому что переменная определена после фильтра.

Вы можете использовать понимание списка для перебора всех значений x и добавить в ticker_list только те символы, которые прошли оператор if функции Symbol. Затем ticker_list используется для создания и сохранения объекта new_Memory

room = str('Bingo Bango Bungo EURUSD=X')

x = room.split()
def Symbol(symbol):
    aapl = yf.Ticker(symbol)
    ainfo = aapl.history(period='1y')
    if len(ainfo) >= 40:
        print('yes it is a symbol')
        global tickerZ
        tickerZ = symbol
        return True
    return False

ticker_list = [symbol for symbol in x if Symbol(symbol)]
new_Memory = Memory.objects.create(user=current_user, raw_message=room, date1=datemin, date2=datemax, ticker=ticker_list, command=cmd_exec)
new_Memory.save()

Используйте карту:

all_tickerz = list(map(Symbol, x))

Вы можете использовать python's list-comprehension с генератором для решения этой проблемы с помощью одной строки:

symbols = [symbol for symbol in (Symbol(y) for y in x) if not symbol is None]

или, альтернативно, с фильтром, что может быть более читабельным:

symbols = filter(None, (Symbol(symbol) for symbol in x))
Вернуться на верх