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