如果缺少,Python将元素添加到列表中的列表

Posted

技术标签:

【中文标题】如果缺少,Python将元素添加到列表中的列表【英文标题】:Python Add Elements to Lists within List if Missing 【发布时间】:2017-03-31 05:12:14 【问题描述】:

给定以下列表:

a = [[2,3],[1,2,3],[1]]

我需要 a 中的每个列表都具有相同数量的元素。 首先,我需要获取 a 中任何列表的最长长度。 然后,我需要确保所有列表至少有那么长。 如果不是,我想在末尾添加一个零 (0),直到这是真的。 期望的结果是:

b = [[2,3,0],[1,2,3],[1,0,0]]

提前致谢!

附:我还需要将其应用于像这样的 Pandas 数据框:

import pandas as pd
b = [[2,3,0],[1,2,3],[1,0,0]]
f=pd.DataFrame('column':b)

【问题讨论】:

你能发布你的尝试吗? 似乎相关:Convert Python sequence to NumPy array, filling missing values. 【参考方案1】:

首先,计算元素的最大长度:

maxlen=len(max(a,key=len))  # max element using sublist len criterion

或者正如 Patrick 建议的那样,在子列表长度上使用生成器理解,可能会快一点:

maxlen=max(len(sublist) for sublist in a)  # max of all sublist lengths

然后创建一个填充为 0 的新列表:

b = [sl+[0]*(maxlen-len(sl)) for sl in a]  # list comp for padding

a = [[2,3],[1,2,3],[1]] 的结果:

[[2, 3, 0], [1, 2, 3], [1, 0, 0]]

注意:可以在一行中完成,但由于 maxlen 的重新计算,性能不会很好。单线并不总是最好的解决方案。

b = [sl+[0]*(len(max(a,key=len))-len(sl)) for sl in a]  # not very performant

【讨论】:

maxlen=len(max(a,key=len)) 看起来有点奇怪。有任何理由这样做超过maxlen=max(len(sublist) for sublist in a) 不,这只是我能想到的最复杂的单线:)。我知道我必须避免filtermap 和很多复杂的结构,大多数情况下最好用 listcomps/gencomps 代替,但我继续这样做......用你的编辑替代品。 我知道你的意思。几年来我只做函数式编程,有时我觉得我回来了,想告诉大家这一切都只是墙上的影子。 非常有哲理:) 前几天我在那些功能性工件上失去了一个很好的答案。而在 python 3 中,当你需要一个列表时,你必须显式地转换它,使它变得更加复杂。就这样决定了:我要停下来了 :) 谢谢你把我带出洞穴。 使用itertools.zip_longest,您无需自己计算最大长度。【参考方案2】:
for i in a: 
    while len(i) < 3:
        i.append(0)

【讨论】:

慢...避免for循环,最重要的是追加:) @JohnSmith 谢谢你指出这一点,我实际上并不知道特别是关于附加的,很高兴知道:)【参考方案3】:

怎么样

pd.DataFrame(a).fillna(0)


得到你想要的东西

pd.Series(pd.DataFrame(a).fillna(0).astype(int).values.tolist()).to_frame('column')


这也和this question有关

您可以在哪里获得更好的性能

def box(v):
    lens = np.array([len(item) for item in v])
    mask = lens[:,None] > np.arange(lens.max())
    out = np.full(mask.shape, 0, dtype=int)
    out[mask] = np.concatenate(v)
    return out

pd.DataFrame(dict(columns=box(a).tolist()))


时机

【讨论】:

将是我的 goto 解决方案

以上是关于如果缺少,Python将元素添加到列表中的列表的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将列表中的元素添加到另一个字符串列表中

如何将整数添加到列表中的每个元素?

python怎么把列表中的元素添加到数组

如何将所有数组的元素添加到python中的一个列表中[重复]

在python中怎么把列表中的元素添加到字典中

在python中怎么把列表中的元素添加到字典中