Собрать в список пары значений из разных циклов
lines #полученный beautifulSoup-файл (но не суть)
cont = []
x1 = ''
y1 = ''
for i in lines:
с1 = re_cat_n.findall(str(i)) #чищу каждый i по написанной регулярке re_cat_n
for i in enumerate(filter(None, с1)): #применяю фильтр (чтобы пустых значений внутри списка не было
с1 = i[1] # беру второй столбец из enumerate
print(с1) # печатаю внутри цикла все хорошо
есть второй такой же цикл c2
Проблема: пытаюсь собрать
cont.append(с1, с2) # не получается.
Вопрос, как получить:
cont = [(с1[0], c2[0]), (c1[1], c2[1]), etc..]
решение было таким:
в циклах - cont1.append(c1) и сont2.append(c2)
после циклов - cont = list(zip(cat_num, price))
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Для параллельного перебора нескольких последовательностей в питоне есть специальная функция zip, которая даёт на выходе именно (с1[0], c2[0]), (c1[1], c2[1]), ...
zip(c1, c2)
Правда, zip выдаёт на выходе итератор, если вы хотите именно список получить, то нужно в него преобразовать результат:
list(zip(c1, c2))
Автор решения: Vadim.Sharoikin
→ Ссылка
Кроме zip можно еще так c помощью numpi. Только 2 цикл замените на свой(я взял как 1 и заменил 1 на 2)
import numpy as np
lines #полученный beautifulSoup-файл (но не суть)
cont1 = []
cont2 = []
x1 = ''
y1 = ''
for i in lines:
с1 = re_cat_n.findall(str(i)) #чищу каждый i по написанной регулярке re_cat_n
for i in enumerate(filter(None, с1)): #применяю фильтр (чтобы пустых значений внутри списка не было
с1 = i[1] # беру второй столбец из enumerate
cont1.append(с1)
for i in lines:
с2 = re_cat_n.findall(str(i)) #чищу каждый i по написанной регулярке re_cat_n
for i in enumerate(filter(None, с2)): #применяю фильтр (чтобы пустых значений внутри списка не было
с2 = i[1] # беру второй столбец из enumerate
cont2.append(с2)
cont = np.c_[np.array(cont1), np.array(cont2)]