Python-在列表列表中获取唯一和排序的值

时间:2018-07-18 06:07:08

标签: python list

我想操纵结果以得到此结果:

[[50, 100],[100, 130],[20, 50, 100, 130]]

对此:

[[0, 50, 100, 0],[0 ,0, 100, 130],[20, 50, 100, 130]]

这个想法是用零填充相同值之间的间隙,这表示直到达到相同值之前才没有值。

3 个答案:

答案 0 :(得分:1)

由于您的问题并未明确指出:假设,此后所有列表中的条目应进行排序,并且每个数字在每个子列表中都是唯一的。< / p>

您可以通过以下方式达到此目的:

numbers = [[50, 100],[100, 130],[20, 50, 100, 130]]

unique = sorted({n for l in numbers for n in l})

new_numbers = [[x if x in l else 0 for x in unique] for l in numbers]

new_numbers
> [[0, 50, 100, 0], [0, 0, 100, 130], [20, 50, 100, 130]]

解决方案的一些解释:首先,获取原始列表中出现的所有(唯一)数字。然后,遍历原始列表并将0添加到位置(其中唯一编号中的数字不属于子列表)。请注意,在此操作期间,原始列表将被排序,因此[100, 50]将变为[0, 50, 100, 0]

编辑:由于juanpa.arrivillaga的评论,使得更多的Python语言。

答案 1 :(得分:-1)

您首先要找到所有可能的唯一数字的列表,并将其存储在已排序的列表s中。然后,在原始列表中的所有子列表中导航,然后在子列表中浏览排序后的列表,如果元素在排序后的列表中,则返回该元素,如果不是0

>>> l = [[50, 100],[100, 130],[20, 50, 100, 130]]
>>> s = sorted(set([e for sl in l for e in sl]))
>>> [[e if e in sl else 0 for e in s] for sl in l]
[[0, 50, 100, 0], [0, 0, 100, 130], [20, 50, 100, 130]]

答案 2 :(得分:-1)

l = [[50, 100],[100, 130],[20, 50, 100, 130]]
r = sorted(l, key=len)[-1]
print([[n if n in i else 0 for n in r] for i in l])

这将输出:

[[0, 50, 100, 0], [0, 0, 100, 130], [20, 50, 100, 130]]