我们如何从另一个列表元素填充 Python 列表中的所有空列表?



有这样的列表

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

相关内容

  • 没有找到相关文章

最新更新