【问题标题】:Append value to the empty lists to a list of list by indices of those empty list using python使用python通过那些空列表的索引将值附加到空列表到列表列表
【发布时间】:2019-11-01 13:03:34
【问题描述】:

我有一个这样的嵌套列表,

 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)

但是执行时间会很长,我正在寻找排序削减来有效地完成它。

【问题讨论】:

  • 什么是分拣?
  • 我预计执行时间不会有很大改善
  • 我的意思是我想减少执行时间。任何轻微的改进将不胜感激
  • len(i) == 0 不是必需的(并且可能会更慢),您可以使用if not i 来更加pythonic,并且可能稍微快一些。

标签: python list arraylist itertools


【解决方案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]]

【讨论】:

  • 虽然这是真的,但我不明白为什么这应该更快。本质上,列表推导遍历列表 l。编辑:我同意,当然常数可能会有所不同。
  • @stephanmg 我会很惊讶有一种数据结构或某种算法可以提高 OP 算法的时间复杂度。鉴于这一假设,人们只能改进常量,并且根据我的经验,列表理解比 for 循环更快。
  • list comp肯定会快一点。这个答案也不执行任何附加方法(附加通常需要时间)。你是对的,它不会快很多,但肯定会比快一点
  • 好的,感谢您的澄清。所以 +1 用于列表理解。 @Daniel Mesejo:我同意不断的评论。
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2011-10-10
  • 1970-01-01
  • 2014-05-22
  • 2019-03-29
相关资源
最近更新 更多