我有一个包含多米诺骨牌的列表列表(那些也是两个整数的列表),我需要找到其中一个多米诺骨牌的索引
示例:
list_of_hand = [[[2, 5], [5, 5], [6, 5], [6, 4]], [[3, 2], [4, 5], [4, 4], [6, 1]]]
此列表是两个列表,其中包括玩家拥有的所有多米诺骨牌。
如何找到多米诺骨牌[6, 5]
的索引?
答案 0 :(得分:1)
您可以使用简单的功能搜索子列表:
x = [[[2, 5], [5, 5], [6, 5], [6, 4]], [[3, 2], [4, 5], [4, 4], [6, 1]]]
def hand_search(L, domino):
for s in L:
if domino in s:
return (L.index(s), s.index(domino))
return -1
print(hand_search(x, [6,5]))
print(hand_search(x, [6,1]))
输出:
(0, 2) # 0 is the player, 2 is the position in their hand
(1, 3) # 1 is the player, 3 is the position in their hand
只要嵌套相同,这就可以扩展到任意数量的玩家。
答案 1 :(得分:1)
一种方法是在循环中使用enumerate
(PEP 279)函数,如下所示:
def search(l,domino):
for m,i in enumerate(l):
for n,j in enumerate(i):
if domino == j:
return(m,n)
return("No match.")
>>> search(list_of_hand,[6,5])
(0, 2)
答案 2 :(得分:0)
或者你可以将所有内容保存在词典中:
dominos, hands = {}, {}
def give(d, h):
hands.setdefault(h, []).append(d)
dominos.update({d:h})
give( (6,5), 1 )
give( (2,5), 1 )
give( (3,2), 2 )
give( (5,5), 2 )
print hands # {1: [(6, 5), (2, 5)], 2: [(3, 2), (5, 5)]}
print dominos # {(2, 5): 1, (3, 2): 2, (6, 5): 1, (5, 5): 2}
print hands[2] # [(3, 2), (5, 5)]
print dominos[(6,5)] # 1
答案 3 :(得分:0)
您可以将dict与enumerate一起使用:
这是两个[6,5]
的例子list_of_hand = [[[2, 5], [5, 5], [6, 5], [6, 4]], [[3, 2], [4, 5], [4, 4], [6, 1],[6,5]]]
def find_dominos(list_data,value):
index_v={}
for i,j in enumerate(list_data):
for sub,index_sub in enumerate(j):
if value==index_sub:
if tuple(value) not in index_v:
index_v[tuple(value)]=[(i,sub)]
else:
index_v[tuple(value)].append((i,sub))
return index_v
print(find_dominos(list_of_hand,[6,5]))
输出:
{(6, 5): [(0, 2), (1, 4)]}