平坦列表是通过列表推导的结果。

11 浏览
0 Comments

平坦列表是通过列表推导的结果。

我使用列表推导式的方式,对于每个元素都有2个结果值:\n

my_list = [10,20,30]
res_list = [ (x*2, x*3) for x in my_list ]
res_list # [(20, 30), (40, 60), (60, 90)]

\n但是我需要得到一个扁平的列表,所以我必须再进行另一个推导式:\n

res_list_1 = [yy for xx in res_list for yy in xx]
res_list_1 # [20, 30, 40, 60, 60, 90]

\n有没有办法可以避免这样做,并且直接在第一个推导式中得到扁平的res_list

0
0 Comments

从上面的代码中可以看到,我们想要通过列表推导式将一个嵌套的列表转化为一个平铺的列表。但是,我们发现最终的结果并不是我们期望的。原因是在列表推导式中,我们使用了两个for循环来遍历嵌套的列表。在内层循环中,我们对每个元素进行了相应的操作,但是最后的结果并没有如预期般平铺开来。

解决这个问题的方法是将tuple放在内层循环的末尾。这样,在每次内层循环结束时,tuple会被展开并添加到结果列表中。通过这种方式,我们可以确保最终的结果是一个平铺的列表。

下面是修改后的代码:

res_list_1 = [item for object in my_list for item in (object*2, object*3)]

通过以上的修改,我们可以得到我们期望的平铺列表作为结果。这种方法通过改变tuple的位置,确保了每个元素都能够被正确地添加到结果列表中。

总结起来,当我们在使用列表推导式时,如果希望将一个嵌套的列表转化为一个平铺的列表,我们需要注意tuple的位置。将tuple放在内层循环的末尾,可以确保每个元素都被正确地添加到结果列表中。这样,我们就可以得到我们期望的平铺列表作为结果。

0