如何在列表列表中查找多米诺骨牌的索引

时间:2018-03-27 14:18:28

标签: python list indexof

我有一个包含多米诺骨牌的列表列表(那些也是两个整数的列表),我需要找到其中一个多米诺骨牌的索引

示例:

list_of_hand = [[[2, 5], [5, 5], [6, 5], [6, 4]], [[3, 2], [4, 5], [4, 4], [6, 1]]]

此列表是两个列表,其中包括玩家拥有的所有多米诺骨牌。

如何找到多米诺骨牌[6, 5]的索引?

4 个答案:

答案 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)]}