5

我正在尝试从包含图块描述的 xml 文件构建棋盘游戏的图块列表。xml 文件描述了每种磁贴类型以及该类型的磁贴数量。

到目前为止,我已经获得了以下代码,它创建了一个列表,其中每种瓷砖类型都只有一种:

    [Tile(el.id) for el in <tile descriptions>]

我想创建一个包含每个图块的适当数量的列表,例如:

    [Tile(el.id) * <el.n_tiles> for el in <tile descriptions>]

是否有一个优雅的单线来做到这一点,还是我需要通过为每种瓷砖类型创建一个列表然后连接来长期完成它?

4

2 回答 2

3

怎么样:

[Tile(el.id) for el in <tile descriptions> for _ in range(el.n_tiles)]
于 2013-04-01T16:19:05.493 回答
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实现相同的效果(列表展平) 。

希望这可以帮助。快乐的游戏:-)

于 2013-04-01T16:24:22.903 回答