我有以下列表推导,它返回每个位置的坐标对象列表。
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循环的情况,但我很好奇是否可以通过列表推导来完成)
答案 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), [])