Python:在列表解析中重复元素?

时间:2010-05-17 03:43:21

标签: python list-comprehension

我有以下列表推导,它返回每个位置的坐标对象列表。

coordinate_list = [Coordinates(location.latitude, location.longitude)
                   for location in locations]

这很有效。

现在假设location对象有一个number_of_times成员。我想要一个列表推导来生成n个Coordinate对象,其中n是特定位置的number_of_times。因此,如果某个位置的number_of_times = 5,那么该位置的坐标将在列表中重复5次。 (也许这是for循环的情况,但我很好奇是否可以通过列表推导来完成)

3 个答案:

答案 0 :(得分:7)

coordinate_list = [x for location in locations
                   for x in [Coordinates(location.latitude,
                                         location.longitude)
                            ] * location.number_of_times]

编辑:OP建议循环可能更清晰,考虑到标识符的长度,这绝对是可能的。等效代码将类似于:

coordinate_list = [ ]
for location in locations:
    coord = Coordinates(location.latitude, location.longitude)
    coordinate_list.extend([coord] * location.number_of_times)

循环确实看起来很好,部分原因是列表的extend方法在这里工作得很好,部分原因是你要为你正在扩展的Coordinate实例命名。

答案 1 :(得分:6)

尝试

coordinate_list = [Coordinates(location.latitude, location.longitude)
                   for location in locations 
                   for i in range(location.number_of_times)]

答案 2 :(得分:0)

您可以将序列乘以number_of_times值。所以[1,2] * 3将等于[1,2,1,2,1,2]。如果你在列表中得到坐标,那么将列表乘以重复次数,你的结果应该是[coord,coord,coord]。

def coordsFor(location):
   return coord = [Coordinates(location.latitude, location.longitude) ]*location.number_of_times

连接列表中每个元素的coordsFor。

reduce(operator.add, map(coordsFor, locations), [])