代码之家  ›  专栏  ›  技术社区  ›  User

python:在列表理解中重复元素?

  •  4
  • User  · 技术社区  · 15 年前

    我有下面的列表理解,它返回每个位置的坐标对象列表。

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

    这是可行的。

    现在假设location对象有一个\u times成员。我需要一个列表理解来生成n个坐标对象,其中n是特定位置的\次数。因此,如果一个位置的_乘以5,那么该位置的坐标将在列表中重复5次。(也许这是一个for循环的例子,但我很好奇是否可以通过列表理解来实现)

    3 回复  |  直到 15 年前
        1
  •  7
  •   Alex Martelli    15 年前
    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 您正在扩展的实例。

        2
  •  6
  •   brainjam    15 年前

    尝试

    coordinate_list = [Coordinates(location.latitude, location.longitude)
                       for location in locations 
                       for i in range(location.number_of_times)]
    
        3
  •  0
  •   Ishpeck    15 年前

    可以将序列乘以 number_of_times 价值。所以[1,2]*3等于[1,2,1,2,1,2]。如果在列表中获得坐标,然后将列表乘以重复次数,则结果应为[坐标,坐标,坐标]。

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

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

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