Объединить несколько списков по элементам
Есть таблица, представленная в виде списка списков (на смысл не обращать внимания):
table = [['', 'Количество', 'Продано', 'Цена'],
['', 'элементов', 'товаров', 'товара'],
['Картошка', '23', '14', '34'],
['Лимон', '20', '10', '30'],
['Огурец', '35', '17', '20']]
Те списки, у которых 1 элемент пустой, являются названиями столбцов, и их нужно объединить по элементам, то есть создать список следующего вида:
['', 'Количество элементов', 'Продано товаров', 'Цена товара']
И заменить в главном списке, чтобы получить такой список в итоге:
[['', 'Количество элементов', 'Продано товаров', 'Цена товара'],
['Картошка', '23', '14', '34'],
['Лимон', '20', '10', '30'],
['Огурец', '35', '17', '20']]
Моя реализация
col = []
for sp in table:
if sp[0] == '':
col.append(sp)
Как решить данную задачу дальше не знаю
Ответы (4 шт):
Автор решения: EdwardElric
→ Ссылка
Попробуй так:
len_of_elems = len(table[0])
temp_list = [table[0][i]+table[1][i] if i==0 else table[0][i]+' '+table[1][i] for i in range(len_of_elems)]
res_table = list([temp_list, table[2], table[3], table[4]])
for row in res_table:
print(row)
Автор решения: George
→ Ссылка
Ну можно сделать с помощью генераторов списка и zip
arr = [f'{i} {j}'for i, j in zip(*(item for item in table if item[0] == ''))]
Автор решения: JvstTeo
→ Ссылка
Можно и проще)
table = [
['', 'Количество', 'Продано', 'Цена'],
['', 'элементов', 'товаров', 'товара'],
['Картошка', '23', '14', '34'],
['Лимон', '20', '10', '30'],
['Огурец', '35', '17', '20']
]
res = []
for n in range(len(table[0])):
res.append(f"{table[0][n]} {table[1][n]}")
table.pop(0) #убрать первый элемент из списка
table[0]=res
итог: [[' ', 'Количество элементов', 'Продано товаров', 'Цена товара'], ['Картошка', '23', '14', '34'], ['Лимон', '20', '10', '30'], ['Огурец', '35', '17', '20']]
Автор решения: Сергей Ш
→ Ссылка
table = [['', 'Количество', 'Продано', 'Цена'],
['', 'элементов', 'товаров', 'товара'],
['Картошка', '23', '14', '34'],
['Лимон', '20', '10', '30'],
['Огурец', '35', '17', '20']]
t1, t2, *tt = table
table = [[f'{x1} {x2}' if x1 else x1 for x1, x2 in zip(t1, t2)], *tt]
# table = [[''] + [f'{x1} {x2}' for x1, x2 in zip(t1[1:], t2[1:])], *tt]
print(table)