如何迭代列表并更改元素值?

2024-03-29 12:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份清单:

game = [['X', 'O', 'O'], ['', '', 'O'], ['', '', '']]

我想更改所有值:

  • 如果元素为“X”,则设置为1。在
  • 如果元素为“O”,则设置 到2。在
  • 如果元素为“”(无),则设置为0(零)。在

输出将是:

^{pr2}$

我可以这样迭代:

for list in game:
  for element in list:
    ...

但是要更改列表列表中的元素,那就另当别论了,我可以用append创建一个新列表,但是我得到的结果是[1, 2, 2, 0, 0, 2, 0, 0, 0]


Tags: ingame元素列表forelementlistappend
3条回答

已经有很多好答案了。我将使用map()添加一行代码,因为它很有趣:

[list(map(lambda x: {'X':'1', 'O':'2', '':'0'}.get(x), i)) for i in game]

# [['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]

说明:map()实际上是在传递的对象i之上应用一个函数,这是游戏的子列表。在本例中,我们希望将评分字典中的.get(x)应用于game中的子列表(i)中的每个标记(x)。结合列表理解,它将所有转换后的分数作为list的一个新的lists

使用字典和列表理解:

>>> game = [['X', 'O', 'O'], ['', '', 'O'], ['', '', '']]
>>> d = {'X': '1', 'O': '2', '': '0'}
>>> [[d[x] for x in row] for row in game]
[['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]

现在您已经有了一个答案列表,该列表正在致力于用尽所有可能来转换基于简单映射的列表的值,所以不包括使用map()的解决方案似乎是失职的。这里是:

game = [['X', 'O', 'O'], ['', '', 'O'], ['', '', '']]

nums = [list(map(lambda x: '2' if x == 'O' else '1' if x == 'X' else '0', row)) for row in game]
print(nums)
# OUTPUT
# [['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]

相关问题 更多 >