在列表中检测相同的值

时间:2019-03-09 16:00:07

标签: python list

我目前正在开发Sudoku游戏,因为验证背后的逻辑非常有趣,并且有很多方法可以实现。

我的问题很简单。 python中是否有任何函数可以检查列表中是否存在一个以上的值?

我做了一个小功能来做到这一点,并且有效:

def IsRepeated(list):
    overlap = False 
    for index, val in enumerate(list):
        for step in range(index+1, len(list)):
            if val == list[step]:
                overlap = True
                break
        if overlap:
            break
    return overlap

输入的是类似a = [1,2,3,4,5,6]

的列表

这很完美,但是我想确保没有其他更好的方法可以做到这一点,

3 个答案:

答案 0 :(得分:3)

使用Python控制台的示例:

>>> a=[1,2,3,4,5,6,6]
>>> set(a)
{1, 2, 3, 4, 5, 6}
>>> len(set(a))
6
>>> len(a)
7
>>> if len(set(a)) != len(a):
...    print("Yes, there is some value present in a list more than once.")
...
Yes, there is some value present in a list more than once.

答案 1 :(得分:2)

没有确切的功能可以实现此目的。但是您可以使用Counter使其更高效,更简短:

from collections import Counter

def IsRepeated(lst):
    return any(v > 1 for v in Counter(lst).values())

a = [1,2,3,4,5,6]
print(IsRepeated(a))
# False

顺便说一句,不要将列表命名为list,因为它会遮盖内置列表。

答案 2 :(得分:1)

对于a=[1,2,3,4,5,6,6]

np.unique(a)[np.where(np.array([len(np.where(a==i)[0]) for i in np.unique(a)])>1)[0]]

这将为您提供出现多次的元素列表。