Как выровнять два или более массивов в списке?

#python-3.x #list #for-loop #append

#python-3.x #Список #для цикла #добавить

Вопрос:

Я пытаюсь выполнить некоторый количественный анализ цен на акции. итак, я выбрал несколько случайных акций с рынка разных лет с соответствующими критериями. Вот тут-то и возникла проблема. Я использовал for loop в течение многих лет и собрал результаты вместе, поэтому результатом является [список тикеров акций в 2020 году], [список тикеров акций в 2019 году], [список тикеров акций в 2018 году]…

DOM

 >>>print(list(get_code_list()))
[array(['601677.SH', '000685.SZ', '600675.SH', '603018.SH',....], dtype=object),
array(['600230.SH', '600007.SH', '300068.SZ', '601369.SH',..., dtype=object)]
  

Я хочу объединить их в один большой список без дубликатов, чтобы я мог зацикливать их для чтения CSV-файлов на моем жестком диске.

Я также пробовал некоторые методы, но, похоже, это не имеет отношения к этому вопросу.

 def flatten(container):
    for x in container:
        if isinstance(x, list):
            for y in flatten(x):
                yield y
        else:
            yield x
  

или

 import functools

functools.reduce(lambda x,y:x y, stock_lists)
  

оба метода не дали мне того, что я хочу.
может ли кто-нибудь помочь мне с этим вопросом?
Спасибо, высоко ценится.

мои полные коды размещены ниже:

 def get_code_list(years=None):
    samples = list()
    if years is None:
        years = list([20200212,20190222, ]) # 20180222, 20170222, 20160222
        backs = list()
        for i, year in enumerate(years, 1):
            dd = pro.daily_basic(trade_date=year)
            x1 = dd.close < 100
            x2 = dd.circ_mv > 400000  # 流通市值低于300亿大于50亿
            x3 = dd.circ_mv < 5000000
            x4 = dd.pb < 15  # 市净率低于15
            x5 = dd.pe_ttm < 100  # 市盈率低于100
            x6 = dd.dv_ttm > 1  # 股息率大于1%
            x = x1 amp; x2 amp; x3 amp; x4 amp; x5 amp; x6
            stock_list = dd[x].ts_code.values
            backs.append(stock_list)
        samples.append(backs)
#     return functools.reduce(lambda x,y:x y,samples[:])
#     return flatten(samples)
  

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

1. Тип вашего ожидаемого вывода — это список, верно? Имеет ли значение порядок?

2. это важно, потому что мы не можем зациклить два или более массивов в одном списке в одной настройке. Мы должны убедиться, что это один список с одной скобкой. @jizhihaoSAMA

Ответ №1:

Попробуйте объединить списки в вашем цикле. Если это обычные списки Python, то backs = stock_list

У Numpy также есть concatenate функция https://numpy.org/doc/stable/reference/generated/numpy.concatenate.html

np.concatenate([backs, stock_list])

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

1. с backs = np.concatenate([backs, stock_list]) я смог поместить их в один блок, сработал как по волшебству. логика была именно такой, как вы сказали: backs = stock_list , большое спасибо, шеф! @g23