Как разархивировать список с разделенными комой столбцами в python?

#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. Но в любом случае спасибо.