我想操纵结果以得到此结果:
[[50, 100],[100, 130],[20, 50, 100, 130]]
对此:
[[0, 50, 100, 0],[0 ,0, 100, 130],[20, 50, 100, 130]]
这个想法是用零填充相同值之间的间隙,这表示直到达到相同值之前才没有值。
答案 0 :(得分:1)
由于您的问题并未明确指出: 您可以通过以下方式达到此目的: 解决方案的一些解释:首先,获取原始列表中出现的所有(唯一)数字。然后,遍历原始列表并将0添加到位置(其中唯一编号中的数字不属于子列表)。请注意,在此操作期间,原始列表将被排序,因此 编辑:由于juanpa.arrivillaga的评论,使得更多的Python语言。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]]
[100, 50]
将变为[0, 50, 100, 0]
。
答案 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]]