平坦列表是通过列表推导的结果。
平坦列表是通过列表推导的结果。
我使用列表推导式的方式,对于每个元素都有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
?
从上面的代码中可以看到,我们想要通过列表推导式将一个嵌套的列表转化为一个平铺的列表。但是,我们发现最终的结果并不是我们期望的。原因是在列表推导式中,我们使用了两个for
循环来遍历嵌套的列表。在内层循环中,我们对每个元素进行了相应的操作,但是最后的结果并没有如预期般平铺开来。
解决这个问题的方法是将tuple
放在内层循环的末尾。这样,在每次内层循环结束时,tuple
会被展开并添加到结果列表中。通过这种方式,我们可以确保最终的结果是一个平铺的列表。
下面是修改后的代码:
res_list_1 = [item for object in my_list for item in (object*2, object*3)]
通过以上的修改,我们可以得到我们期望的平铺列表作为结果。这种方法通过改变tuple
的位置,确保了每个元素都能够被正确地添加到结果列表中。
总结起来,当我们在使用列表推导式时,如果希望将一个嵌套的列表转化为一个平铺的列表,我们需要注意tuple
的位置。将tuple
放在内层循环的末尾,可以确保每个元素都被正确地添加到结果列表中。这样,我们就可以得到我们期望的平铺列表作为结果。