@tofel

Как объединить данные в списке?

День добрый нужна помощь есть список пытаюсь объединить данные
a=['Миша', '5', '55', '120', 'Хуан', '0', '4', 'Ваня', '6', '4', '1', 'Педро', '2.35', '3.40']

n = 4
f=list(zip(*[iter(a)]*n))
print(f)
[('Миша', '5', '55', '120'), ('Хуан', '0', '4', 'Ваня'), ('6', '4', '1', 'Педро')]

И если с Мишей все в порядке. То на Хуане начинается все съежать ибо там меньше данных. Вопрос вот в чем, как сделать так, чтобы выходе получался правильный список?
[('Миша', '5', '55', '120'), ('Хуан', '0', '4'), ('Ваня', '6', '4', '1'), ('Педро', '2.35', '3.40')]
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@nukler
местный юродивый
Говнокод конечно:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys,re
def main(argv=sys.argv):
	a = ['Миша', '5', '55', '120', 'Хуан', '0', '4', 'Ваня', '6', '4', '1', 'Педро', '2.35', '3.40']
	ss = list()
	ss1 = list()
	for i in a:
		if not re.search(r"\d",str(i)):
			if ss1:
				ss.append(tuple(ss1))
			ss1 = list()
			ss1.append(i)
		else:
			ss1.append(i)
	ss.append(tuple(ss1))
	print(ss)

if __name__ == "__main__":
	sys.exit(main())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MAGistr_MTM
Учусь программировать
def test(a):
    start = 0
    result = []
    for i, item in enumerate(a[1:]):
        if not item.replace('.', '', 1).isdigit():  # to handle float
            end = i
            result.append(a[start:end + 1])
            start = end + 1
    result.append(a[start:])
    return result

Это если брать во внимание, если значение не число, то оно должно начинать новый список
Ответ написан
Комментировать
@o5a
1. Можно набирать вложенные списки, начинающиеся со слов и добавлять к итоговому, когда встречаем следующее слово:
res = []
temp=[]
for w in a:
    if w[0].isalpha():
        if temp:
            res.append(temp)
            temp = []
    temp.append(w)
res.append(temp)
print(res)


2. Или найти индексы всех слов и затем нарезать по ним исходный список
idx = [i for i, x in enumerate(a) if x[0].isalpha()]
res = [a[i:j] for i,j in zip(idx, idx[1:]+[len(a)])]
print(res)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы