Как сократить код Python
Вот собственно код и тут все видно. Хотелось бы автоматизировать через цикл. Но обратите внимание, последняя строка при выводе имеет только дату, как удалять такие не полные строки автоматом? Так же товара может быть больше, но структура строк не меняется.
import sqlite3
add = []
test = []
test.append(['32', 'AGA Антифриз Z40', '38', 'Mannol Classic 10W-40', '42', 'Fenom Очиститель карб', '47', 'Gleid Master -30 жид'])
test.append(['250,00', '380,00', '200,00', '350,00'])
test.append(['7.00', '22.00', '17.00', '25.00'])
test.append(['2.00', '500,00', '1.00', '380,00', '1.00', '200,00', '1.00', '350,00'])
test.append(['06-04-21'])
for i in range(1):
a1 = test[0:5][0][0:2],test[0:5][1][0:1],test[0:5][2][0:1],test[0:5][3][0:2],test[0:5][4][0:1]
a2 = test[0:5][0][2:4],test[0:5][1][1:2],test[0:5][2][1:2],test[0:5][3][2:4],test[0:5][4][0:1]
a3 = test[0:5][0][4:6],test[0:5][1][2:3],test[0:5][2][2:3],test[0:5][3][4:6],test[0:5][4][0:1]
a4 = test[0:5][0][6:8],test[0:5][1][3:4],test[0:5][2][3:4],test[0:5][3][6:8],test[0:5][4][0:1]
a5 = test[0:5][0][8:10],test[0:5][1][4:5],test[0:5][2][4:5],test[0:5][3][8:10],test[0:5][4][0:1]
res1 = []
res2 = []
res3 = []
res4 = []
res5 = []
for x in a1:
res1.extend(x if isinstance(x, list) else [x])
for x in a2:
res2.extend(x if isinstance(x, list) else [x])
for x in a3:
res3.extend(x if isinstance(x, list) else [x])
for x in a4:
res4.extend(x if isinstance(x, list) else [x])
for x in a5:
res5.extend(x if isinstance(x, list) else [x])
add.append(res1)
add.append(res2)
add.append(res3)
add.append(res4)
add.append(res5)
print()
print()
print(add)
[['32', 'AGA Антифриз Z40', '250,00', '7.00', '2.00', '500,00', '06-04-21'],
['38', 'Mannol Classic 10W-40', '380,00', '22.00', '1.00', '380,00', '06-04-21'],
['42', 'Fenom Очиститель карб', '200,00', '17.00', '1.00', '200,00', '06-04-21'],
['47', 'Gleid Master -30 жид', '350,00', '25.00', '1.00', '350,00', '06-04-21'],
['06-04-21']]
Ответы (3 шт):
Автор решения: MyZik
→ Ссылка
import sqlite3
add = []
test = [['32', 'AGA Антифриз Z40', '38', 'Mannol Classic 10W-40', '42', 'Fenom Очиститель карб', '47',
'Gleid Master -30 жид'], ['250,00', '380,00', '200,00', '350,00'], ['7.00', '22.00', '17.00', '25.00'],
['2.00', '500,00', '1.00', '380,00', '1.00', '200,00', '1.00', '350,00'], ['06-04-21']]
a1 = test[0:5][0][0:2], test[0:5][1][0:1], test[0:5][2][0:1], test[0:5][3][0:2], test[0:5][4][0:1]
a2 = test[0:5][0][2:4], test[0:5][1][1:2], test[0:5][2][1:2], test[0:5][3][2:4], test[0:5][4][0:1]
a3 = test[0:5][0][4:6], test[0:5][1][2:3], test[0:5][2][2:3], test[0:5][3][4:6], test[0:5][4][0:1]
a4 = test[0:5][0][6:8], test[0:5][1][3:4], test[0:5][2][3:4], test[0:5][3][6:8], test[0:5][4][0:1]
a5 = test[0:5][0][8:10], test[0:5][1][4:5], test[0:5][2][4:5], test[0:5][3][8:10], test[0:5][4][0:1]
res1 = res2 = res3 = res4 = res5 = []
for x in a1:
res1.extend(x if isinstance(x, list) else [x])
for x in a2:
res2.extend(x if isinstance(x, list) else [x])
for x in a3:
res3.extend(x if isinstance(x, list) else [x])
for x in a4:
res4.extend(x if isinstance(x, list) else [x])
for x in a5:
res5.extend(x if isinstance(x, list) else [x])
""""
Выше можете заменить и попробовать так:
[res1.extend(x if isinstance(x, list) else [x]) for x in a1]
[res2.extend(x if isinstance(x, list) else [x]) for x in a2]
[res3.extend(x if isinstance(x, list) else [x]) for x in a3]
[res4.extend(x if isinstance(x, list) else [x]) for x in a4]
[res4.extend(x if isinstance(x, list) else [x]) for x in a4]
[res5.extend(x if isinstance(x, list) else [x]) for x in a5]
"""
add.append(res1)
add.append(res2)
add.append(res3)
add.append(res4)
add.append(res5)
print()
print()
print(add)
Автор решения: ioprst
→ Ссылка
arr = [[] for _ in range(5)]
n = m = 0
for i in range(5):
arr[i] = [test[0:5][0][n:n+2], test[0:5][1][m:m+1], test[0:5][2][m:m+1], test[0:5][3][n:n+2], test[0:5][4][0:1]]
n += 2
m += 1
for i, item in enumerate(arr):
add.append([])
for x in item:
add[i].extend(x if isinstance(x, list) else [x])
Автор решения: GrAnd
→ Ссылка
Вообще в одну строчку делается. :)
test = [['32', 'AGA Антифриз Z40', '38', 'Mannol Classic 10W-40', '42', 'Fenom Очиститель карб', '47', 'Gleid Master -30 жид'],
['250,00', '380,00', '200,00', '350,00'],
['7.00', '22.00', '17.00', '25.00'],
['2.00', '500,00', '1.00', '380,00', '1.00', '200,00', '1.00', '350,00'],
['06-04-21']]
result = [[el for grp in it for el in grp] + test[-1] for it in zip(*[zip(*[iter(test[i])]*n) for i, n in enumerate([2,1,1,2])])]
from pprint import pprint
pprint(result, width=len(str(result))-1)
[['32', 'AGA Антифриз Z40', '250,00', '7.00', '2.00', '500,00', '06-04-21'],
['38', 'Mannol Classic 10W-40', '380,00', '22.00', '1.00', '380,00', '06-04-21'],
['42', 'Fenom Очиститель карб', '200,00', '17.00', '1.00', '200,00', '06-04-21'],
['47', 'Gleid Master -30 жид', '350,00', '25.00', '1.00', '350,00', '06-04-21']]