我有一个列表列表:
game = [['X', 'O', 'O'], ['', '', 'O'], ['', '', '']]
我想更改所有值:
输出为:
game = [['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]
我可以这样迭代:
for list in game:
for element in list:
...
但是要更改列表列表中的元素是另一回事,我可以添加一个带有附加内容的新列表,但得到的内容类似于[1, 2, 2, 0, 0, 2, 0, 0, 0]
答案 0 :(得分:5)
使用字典和列表理解:
>>> 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']]
答案 1 :(得分:2)
很多很好的答案。我会用select ul.*
from user_log ul
where exists (select 1
from user_log ul2
where ul2.user_id = ul.user_id and
ul2.comment = 'The one I want'
) and
not exists (select 1
from user_log ul2
where ul2.user_id = ul.user_id and
ul2.comment = 'The one I don''t want'
) ;
扔一个衬纸,只是因为它很有趣:
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)
的子列表(x
)中的每个标记(i
)上。结合列表理解功能,您可以将所有已转换的分数作为game
个新的list
中的得分。
答案 2 :(得分:1)
现在,您有了一个答案列表,该列表正在竭尽所有可能,以基于简单映射转换列表列表的值的所有可能性,似乎我们不应该考虑不包括使用{{1 }}。所以这里是:
map()
答案 3 :(得分:0)
尝试枚举列表:
game = [['X', 'O', 'O'],['', '', 'O'],['', '', '']]
for list in game:
for num,element in enumerate(list):
if element == "X":
list[num] = "1"
if element == "O":
list[num] = "2"
if element == "":
list[num] = "0"
print(game)
答案 4 :(得分:0)
使用numpy
很简单import numpy as np
game = np.array(game)
game[game=='X'] = 1
game[game=='O'] = 2
game[game==''] = 0
print(game.tolist())
# [['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]
print(game.ravel().tolist())
# ['1', '2', '2', '0', '0', '2', '0', '0', '0']
答案 5 :(得分:0)
创建映射字典并迭代列表(无需创建新列表)
d={'X':'1','O':'2','':0}
for i in game:
for idx,value in enumerate(i):
i[idx]=d.get(value, str(value))
print(game) #[['1', '2', '2'], ['0', '0', '2'], ['0', '0', '0']]
如果您要创建一个全新的列表
d={'X':'1','O':'2','':0}
new_list=[]
for i in game:
temp=[]
for idx,value in enumerate(i):
temp.append(d.get(value, str(value)))
new_list.append(temp)
答案 6 :(得分:0)
new_list = []
for list in game:
new_sublist = []
for item in list:
...
new_sublist += new_item
new_list += new_sublist
这应该为您提供仅使用循环的2D列表。
答案 7 :(得分:0)
我将在字典中定义规则并获取值,并将空字符串使用默认值0。
我也使用列表理解。
仅列表理解:
new_game = [[rules.get(item, 0) for item in li] for li in game]
使用助手功能:
game = [['X', 'O', 'O'],
['', '', 'O'],
['', '', '']]
rules = { 'X': '1', 'O': '2' }
def update_list(li):
return [rules.get(item, 0) for item in li]
new_game = [update_list(li) for li in game]
print (new_game)
# [[1, 2, 2], [0, 0, 2], [0, 0, 0]]