Как вставить элемент после каждого другого элемента в подсписке?

#python #list #python-3.8

Вопрос:

У меня есть этот список:

sep = [['IN', 'the', 'midway', 'of', 'this', 'our', 'mortal', 'life'], ['I', 'found', 'me', 'in', 'a', 'gloomy', 'wood', 'astray'], ['Gone', 'from', 'the', 'path', 'direct', 'and', 'e','en', 'to', 'tell'], ['It', 'were', 'no', 'easy', 'task', 'how', 'savage', 'wild'], ['That','forest', 'how', 'robust', 'and', 'rough', 'its', 'growth'], ['Which', 'to', 'remember', 'only', 'my', 'dismay'], ['Renews', 'in', 'bitterness', 'not', 'far', 'from', 'death']]

Как я могу поставить «0» в каждом подэлементе?

Предполагается, что конечный результат будет:

[['IN', '0', 'the', '0', 'midway', '0', 'of', '0', 'this', '0', 'our', '0', 'mortal', '0', 'life', '0' ], ['I', '0', 'found', '0', 'me', '0', 'in', '0', 'a', '0', 'gloomy', '0', 'wood', '0', 'astray', '0'], ['Gone', '0', 'from', '0', 'the', '0', 'path', '0', 'direct', '0', 'and', '0', 'e', '0', 'en', '0', 'to', '0', 'tell', '0'], ['It', '0', 'were', '0', 'no', '0', 'easy', '0', 'task', '0', 'how', '0', 'savage', '0', 'wild', '0'], ['That', '0', 'forest', '0', 'how', '0', 'robust', '0', 'and', '0', 'rough', '0', 'its', '0', 'growth', '0'], ['Which', '0', 'to', '0', 'remember', '0', 'only', '0', 'my', '0', 'dismay', '0'], ['Renews', '0', 'in', '0', 'bitterness', '0', 'not', '0', 'far', '0', 'from', '0', 'death','0']]

Комментарии:

1. sep = [[v for t in zip(l, cycle('0')) for v in t] for l in sep] что-то вроде этого? цикл-это itertools.цикл

2. Мне нужно решение без использования внешних библиотек

3. @Dino, Зачем вам нужно решение без использования внешних библиотек ? если это упражнение, то, по крайней мере, что вы пробовали?

4. Решение Ch3steR очень умное и может быть легко адаптировано для работы без итерационных инструментов. просто замените cycle('0') на ['0']*len(l)

Ответ №1:

Вот мой ответ:

 def sep_list(s,c,n=2):  def gen(s,c,n):  if nlt;2 :  raise Exception("Number needs to be bigger than 1.")  for x in range(0,(len(s)*n)):  if isinstance(s[int(x/n)],list):  yield [y for y in gen(s[int(x/n)],c,n)]  elif x%n==0:  yield c  else:  yield s[int(x/n)]  return([x for x in gen(s,c,n)]) a=sep_list(sep,0) #list,character,distance(optional)  

Таким образом, эта функция будет работать независимо от того, сколько существует подсписков, и вы можете настроить расстояние между ними. Это работает, если взять список и найти его длину. Затем он проходит через список, и если в списке есть еще один список внутри, этот список тоже. Наконец, когда он достигает не-списка, он подсчитывает, находится ли он на заданном расстоянии, и, наконец, возвращает весь список с символом через заданные интервалы.