Добавление элемента в начало списка
Есть список со списками, первый список имеет максимальный размер:
inp = [
['A1', 'B1', 'C1', 'D1', 'E1']
['C2', 'D2', 'E2']
['D3', 'E3']
['A4', 'B4', 'C4', 'D4', 'E4']
['C5', 'D5', 'E5']
['D6', 'E6']
['C7', 'D7', 'E7']
]
Надо что бы предыдущий список дополнял своими знач текущий список В результате должен получиться вот такой список списков
out = [
['A1', 'B1', 'C1', 'D1', 'E1']
['A1', 'B1', 'C2', 'D2', 'E2']
['A1', 'B1', 'C2', 'D3', 'E3']
['A4', 'B4', 'C4', 'D4', 'E4']
['A4', 'B4', 'C5', 'D5', 'E5']
['A4', 'B4', 'C5', 'D6', 'E6']
['A4', 'B4', 'C7', 'D7', 'E7']
]
Подскажите пжлст, я не понимаю как это сделать
Ответы (4 шт):
Автор решения: Zhihar
→ Ссылка
окончательный код:
inp = [
['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2'],
['D3', 'E3'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5'],
['D6', 'E6'],
['C7', 'D7', 'E7']
]
# определить максимальный размер строк
max_len = len(max(inp, key=len))
# сформировать хранилище добавочных элементов
storage = [''] * max_len
# добавить новые элементы
for obj in inp:
# вычислить кол-во элементов, которые требуется добавить
new_len = max_len - len(obj)
# добавить недостающие элементы
obj[:] = storage[:new_len] + obj
# обновить хранилище
storage = obj
print(*inp, sep="\n")
первый вариант
inp = [
['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2'],
['D3', 'E3'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5'],
['D6', 'E6'],
['C7', 'D7', 'E7']
]
# определить максимальный размер строк
max_len = len(max(inp, key=len))
# сформировать хранилище добавочных элементов
storage = [''] * max_len
# добавить новые элементы
for obj in inp:
# вычислить кол-во элементов, которые требуется добавить
new_len = max_len - len(obj)
# добавить недостающие элементы
for index in range(new_len):
obj.insert(0, storage[new_len - index - 1])
# обновить хранилище
storage = obj
print(*inp, sep="\n")
чуть другой подход (не знаю какой лучше, но второй чуть короче и без явного цикла):
# добавить новые элементы
for index, obj in enumerate(inp):
# вычислить кол-во элементов, которые требуется добавить
new_len = max_len - len(obj)
# добавить недостающие элементы
inp[index] = storage[:new_len] + obj
# обновить хранилище
storage = inp[index]
Автор решения: vp_arth
→ Ссылка
inp = [
['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2'],
['D3', 'E3'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5'],
['D6', 'E6'],
['C7', 'D7', 'E7'],
]
pattern = inp[0]
for i, l in enumerate(inp[1:]):
replacement = []
for j, e in enumerate(pattern):
expected = f'{e[0]}{i+2}'
replacement.append(expected if expected in l else e)
l[:] = replacement
pattern = l
for l in inp:
print(l)
Автор решения: extrn
→ Ссылка
import itertools
def complement(x, y):
return x[:-len(y)] + y or x
inp = [
['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2'],
['D3', 'E3'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5'],
['D6', 'E6'],
['C7', 'D7', 'E7'],
]
out = list(itertools.accumulate(inp, complement))
Автор решения: strawdog
→ Ссылка
import pandas as pd
inp = [
['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2'],
['D3', 'E3'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5'],
['D6', 'E6'],
['C7', 'D7', 'E7']
]
res = pd.DataFrame(inp).fillna(method="ffill").values.tolist()
тогда res будет:
[['A1', 'B1', 'C1', 'D1', 'E1'],
['C2', 'D2', 'E2', 'D1', 'E1'],
['D3', 'E3', 'E2', 'D1', 'E1'],
['A4', 'B4', 'C4', 'D4', 'E4'],
['C5', 'D5', 'E5', 'D4', 'E4'],
['D6', 'E6', 'E5', 'D4', 'E4'],
['C7', 'D7', 'E7', 'D4', 'E4']]