如何在二维列表中查找重复项 - Python 3

How to find duplicates in a 2d list - Python 3

list = [['P', True, 1], ['U', True, 3], ['P', True, 4], ['P', True, 5], ['Y', True, 6]]

我正在尝试制作 Hangman 游戏,我正在尝试找到在此 2d 列表中多次出现的字母并获取它们的索引。第一个值是字母,第二个值是他们是否已经找到那个字母,第三个值是 x 坐标。我尝试了很多东西,其中 none 成功了。

我不确定您是否在尝试查找重复字母的索引。这是我试过的。看看这是否有效。如果您要查找整个第二个列表的副本,那么代码将会更改。我试图在第二个列表中找到字母的副本。例如:P 重复 3 次。

list = [['P', True, 1],
        ['U', True, 3],
        ['P', True, 4],
        ['P', True, 5],
        ['Y', True, 6]]

x = [list[i][0][0] for i in range (len(list))]

for i in range (len(x)):
    if (x[i] in x[:i]) or (x[i] in x[i+1:]): print (x[i], i)

输出:

P 0
P 2
P 3

也许从这里开始。这至少会告诉你索引。

list = [['P', True, 1], ['U', True, 3], ['P', True, 4], ['P', True, 5], ['Y', True, 6]]
count = -1
for i in list:
    count += 1
    print(count,i)

returns

0 ['P', True, 1]
1 ['U', True, 3]
2 ['P', True, 4]
3 ['P', True, 5]
4 ['Y', True, 6]

这是一个解决方案,假设我了解要求:

import collections

# note that I added another duplicate - 'U'
l = [['P', True, 1], ['U', True, 3], ['P', True, 4], ['P', True, 5], ['Y', True, 6], ["U", True, 7]]
simplified_list = [i[0] for i in l]
counter = collections.Counter([i for i in simplified_list])
duplicates = [k for k,v in counter.items() if v > 1]

res = [inx for inx, letter in enumerate(simplified_list) if letter in duplicates]
print (res)

以上列表的输出是:

[0, 1, 2, 3, 5]