Python:在列表推导中重复元素?
我有一个列表推导式,它可以为每个地点返回一组坐标对象。
coordinate_list = [Coordinates(location.latitude, location.longitude)
for location in locations]
这个方法是有效的。
现在假设地点对象有一个叫做 number_of_times 的属性。我想用列表推导式生成 n 个坐标对象,其中 n 就是该地点的 number_of_times 值。也就是说,如果一个地点的 number_of_times = 5,那么这个地点的坐标在列表中会出现 5 次。(也许这可以用 for 循环来实现,但我想知道是否可以通过列表推导式来完成)
3 个回答
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), [])
6
试试看
coordinate_list = [Coordinates(location.latitude, location.longitude)
for location in locations
for i in range(location.number_of_times)]
7
coordinate_list = [x for location in locations
for x in [Coordinates(location.latitude,
location.longitude)
] * location.number_of_times]
编辑: 原作者提到使用循环可能会更清晰,考虑到标识符的长度,这确实是个不错的选择。那么相应的代码可能会像这样:
coordinate_list = [ ]
for location in locations:
coord = Coordinates(location.latitude, location.longitude)
coordinate_list.extend([coord] * location.number_of_times)
这个循环看起来不错,部分原因是列表的 extend
方法在这里很好用,另外一个原因是你可以给你正在扩展的 Coordinate
实例起个名字。