Объединить несколько списков по элементам

Рейтинг: 0Ответов: 4Опубликовано: 13.01.2023

Есть таблица, представленная в виде списка списков (на смысл не обращать внимания):

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)

Как решить данную задачу дальше не знаю

Ответы

▲ 1Принят

Можно и проще)

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']]

▲ 3

Ну можно сделать с помощью генераторов списка и zip

arr = [f'{i} {j}'for i, j in zip(*(item for item in table if item[0] == ''))]
▲ 0

Попробуй так:

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)
▲ 0
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)