#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)