Добавить значение в пустые списки в список списка по индексам этого пустого списка с помощью python

У меня есть такой вложенный список,

 l=[[],[],[1,2],[],[5],[],[4,3],[]]

Теперь я получил индексы пустых списков вложенного списка.

indices=[0,1,3,5,7]

Теперь я хочу вставить / добавить ноль в пустые списки по индексу, поэтому список должен выглядеть так:

l=[[0],[0],[1,2],[0],[5],[0],[4,3],[0]]

Я могу это сделать, используя,

x=[]
for i in l:
    if len(i)==0:
        x.append([0])
    else:
        x.append(i)

Но время выполнения будет огромным, я ищу сокращения сортировки, чтобы сделать это эффективно.


person Kallol    schedule 01.11.2019    source источник
comment
Что такое сокращения сортировки?   -  person stephanmg    schedule 01.11.2019
comment
Я бы не ожидал значительного улучшения времени выполнения   -  person Dani Mesejo    schedule 01.11.2019
comment
Я имею в виду, что хочу сократить время выполнения. любое небольшое улучшение будет оценено   -  person Kallol    schedule 01.11.2019
comment
len(i) == 0 не является обязательным (и потенциально более медленным), вы можете использовать if not i, чтобы быть более питоническим и, возможно, немного быстрее.   -  person stephanmg    schedule 01.11.2019


Ответы (1)


Вы можете использовать понимание списка, но это не гарантирует улучшения времени выполнения:

l = [[], [], [1, 2], [], [5], [], [4, 3], []]

result = [e or [0] for e in l]
print(result)

Вывод

[[0], [0], [1, 2], [0], [5], [0], [4, 3], [0]]
person Dani Mesejo    schedule 01.11.2019
comment
Хотя это правда, я не понимаю, почему это должно быть значительно быстрее. По сути, составление списка повторяется по списку l. Изменить: я согласен, константа, конечно, может быть другой. - person stephanmg; 01.11.2019
comment
@stephanmg Я был бы удивлен, что есть структура данных или какой-то алгоритм, который улучшит временную сложность алгоритма OP. Учитывая это предположение, можно было только улучшить константы, и, по моему опыту, понимание списков происходит быстрее, чем циклы for. - person Dani Mesejo; 01.11.2019
comment
составление списка, безусловно, будет немного быстрее. Этот ответ также не выполняет никакого метода добавления (добавление обычно требует времени). Вы правы, это не будет существенно быстрее, но определенно будет больше, чем просто немного быстрее - person Buckeye14Guy; 01.11.2019
comment
Хорошо, спасибо за разъяснения. Итак, +1 для понимания списка. @Daniel Mesejo: Я согласен с постоянным комментарием. - person stephanmg; 01.11.2019