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

#python

Вопрос:

у вас есть такой список

 gt; lst1=[1,2,3] gt; lst2=[[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]]  

хотите получить такой результат, как :

 gt; [[1],['abc','bcd','acd'],[2],['sdf','ghj','klh'],[3]]  

попытались разделить список на 2-й список, а затем агрегировать по

Ответ №1:

Один подход:

 lst1=[1,2,3] lst2=[[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]]  it = iter(lst1) for i in lst2[::2]:  i.append(next(it))  print(lst2)  

Выход

 [[1], ['abc', 'bcd', 'acd'], [2], ['sdf', 'ghj', 'klh'], [3]]  

Альтернатива, которая возвращает новый список:

 it = iter(lst1) res = [l if i % 2 == 1 else [*l, next(it)] for i, l in enumerate(lst2)] print(res)  

Выход

 [[1], ['abc', 'bcd', 'acd'], [2], ['sdf', 'ghj', 'klh'], [3]]  

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

1. большое спасибо , можем ли мы добавить lst2(список, заполненный значением), получив значение из lst1 [['abc', 'bcd', 'acd',1], ['sdf', 'ghj', 'klh',2]]

Ответ №2:

Вот подход, аналогичный подходу Дани Месахо. Сделайте итератор списка заполнения, затем выберите следующий элемент для пустых списков.

 l1 = iter([1, 2, 3]) l2 = [[], ["abc", "bcd", "acd"], [], ["sdf", "ghj", "klh"], []]  print([l or next(l1) for l in l2])  

доходность:

 ➜ python listfill.py [1, ['abc', 'bcd', 'acd'], 2, ['sdf', 'ghj', 'klh'], 3]  

Ответ №3:

Это мое решение, которое проверяет, является ли элемент из lst2 пустым списком , и если да, то добавляется соответствующий элемент из lst1 new_list , в противном случае добавляется соответствующий элемент из lst2 . n используется в качестве индекса для использования lst1 , который увеличивается каждый раз lst1 , когда вместо элемента из добавляется элемент из lst2 .

 lst1=[1,2,3] lst2=[[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]] new_list = [] n = 0  for l in lst2:  if len(l) == 0:  new_list.append([lst1[n]])  n  = 1  else:  new_list.append(l)  print(new_list)  

Ответ №4:

Простая петля сделает эту работу:

Код:

 import copy lst1 = [1,2,3] lst2 = [[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]]  merged_lst = copy.deepcopy(lst2) for i in range(len(lst1)):  merged_lst[i*2].append(lst1[i]) print(merged_lst)  

Выход:

 [[1], ['abc', 'bcd', 'acd'], [2], ['sdf', 'ghj', 'klh'], [3]]  

Ответ №5:

Мы должны проверить, пуст ли внутренний список lst2 или нет, если да, добавьте в него элемент lst1. Мы сделаем это, используя два цикла. Один цикл для итерации lst1 и второй для ieratw lst2. Как только мы получим пустой список, мы добавим в него элемент lst1. Ваш код:

 lst1=[1,2,3] lst2=lst2 = [[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]] for i in lst1:  for j in lst2:  if len(j)==0:  j.append(i)  break #break the inner for loop   print(lst2)