#python #list
#python #Список
Вопрос:
Я работаю в коде, и у меня есть список, подобный:
listA = (
['name1', 'A11,A12,A13', 'B11,B12,B13', 'C11,C12,C13'],
['name2', 'A21,A22', 'B21,B22', 'C21,C22'],
['name3', 'A31,A32,A33,A34,A35', 'B31,B32,B33,B34,B35', 'C31,C32,C33,C34,C35' ],
)
и мне нужно получить:
listA = (
['name1', 'A11', 'B11', 'C11'],
['name1', 'A12', 'B12', 'C12'],
['name1', 'A13', 'B13', 'C13'],
['name2', 'A21', 'B21', 'C21'],
['name2', 'A22', 'B22', 'C22'],
['name3', 'A31', 'B31', 'C31'],
['name3', 'A32', 'B32', 'C32'],
['name3', 'A33', 'B33', 'C33'],
['name3', 'A34', 'B34', 'C34'],
['name3', 'A35', 'B35', 'C35'],
)
пожалуйста, помогите мне, я поставлен на карту.
Спасибо за ваше время.
Комментарии:
1. Вы уверены, что первая строка
listA
верна? Кажется, что там слишком много кавычек.2. Действительно ли 3-й элемент первой строки разделен на отдельные элементы или он такой же, как 2 другие строки?
3. @Sven Marnach Это было неправильно. Спасибо
Ответ №1:
list_b = []
for x in list_a:
i = iter(x)
name = next(i)
list_b.extend((name,) t for t in zip(*(y.split(",") for y in i)))
Ответ №2:
Довольно некрасиво, но…
listB = []
for tup in listA:
tmptup = []
for elt in tup:
splt = elt.split(',')
for n in splt:
tmptup.append(n)
listB.append(tmptup)
Комментарии:
1. Вы могли бы просто использовать tmptup.extend(elt.split(‘,’)) для замены внутреннего цикла и предшествующей ему строки.
2. Полностью! Это было бы намного приятнее.
Ответ №3:
listA = tuple([name, a, b, c] for (name, aas, bbs, ccs) in listA
for (a, b, c) in zip(aas.split(','), bbs.split(','), ccs.split(',')))
Ответ №4:
def uncollapse(L):
temp = []
answer = []
for item in L:
temp= [item[0]] [i.split(',') for i in item]
for i in range(len(temp[1])):
answer.append([temp[0]] [zip(*temp[1:])[i]])
return answer
Протестировано и работает
Комментарии:
1. Я получаю [[‘name3’, (‘name3’, ‘A31’, ‘B31’, ‘C31’)]] : S. Но в любом случае спасибо.