我正在尝试从xml文件构建棋盘游戏的列表,其中包含对棋子的描述。 xml文件描述了每种磁贴类型以及该类型的磁贴数。
到目前为止,我已经得到了以下代码,它创建了一个列表,其中只包含每种磁贴类型之一:
[Tile(el.id) for el in <tile descriptions>]
我想创建一个包含每个图块的适当数量的列表,例如像这样的东西:
[Tile(el.id) * <el.n_tiles> for el in <tile descriptions>]
这样做是否有优雅的单行,或者我是否需要通过为每种磁贴类型创建列表然后连接来实现它?
答案 0 :(得分:3)
怎么样:
[Tile(el.id) for el in <tile descriptions> for _ in range(el.n_tiles)]
答案 1 :(得分:3)
您发布的代码会多次重复相同的内部列表:
[Tile(el.id) * <el.n_tiles> for el in <tile descriptions>]
相反,使用内部列表理解:
[[Tile(el.id) for i in range(<el.n_tiles>)] for el in <tile descriptions>]
如果目标是创建单个连接列表,则可以使用嵌套for循环的列表推导:
[Tile(el.id) for el in <tile descriptions> for i in range(<el.n_tiles>)]
当你更高级时,可以使用itertools.chain.from_iterable实现相同的效果(列表展平)。
希望这会有所帮助。快乐游戏: - )