有这样的列表
> lst1=[1,2,3]
> lst2=[[],['abc','bcd','acd'],[],['sdf','ghj','klh'],[]]
想要输出如下:
> [[1],['abc','bcd','acd'],[2],['sdf','ghj','klh'],[3]]
试图拆分第二个列表的列表,然后聚合
一种方法:
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]]
这是一种类似于Dani Mesajo的方法。创建填充列表的迭代器,然后拉取空列表的下一项。
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]
这是我的解决方案,它检查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)
一个简单的循环就可以完成这项工作:
法典:
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]]
我们必须检查 lst2 的内部列表是否为空,如果是,则将 lst1 的元素添加到其中。我们将使用两个循环来做到这一点。一个循环用于迭代 lst1,第二个循环用于迭代 ilatw 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)