Python 如何检查列表中是否有重复值并获取该值

Python 如何检查列表中是否有重复值并获取该值,python,list,python-2.7,for-loop,Python,List,Python 2.7,For Loop,如何在列表中找到重复的值? 始终只有一个重复值 例如: numbers=[1,2,3,4,5,3] 我需要得到值3 这是我一直在尝试的,但有时它会将同一列表的值打印两次 endLoop=False for n1 in range(0,len(numbers)): for n2 in range(1,len(numbers)): if numbers[n1]==numbers[n2]: print numbers

如何在列表中找到重复的值? 始终只有一个重复值

例如:

numbers=[1,2,3,4,5,3]
我需要得到值3

这是我一直在尝试的,但有时它会将同一列表的值打印两次

endLoop=False
    for n1 in range(0,len(numbers)):
        for n2 in range(1,len(numbers)):
            if numbers[n1]==numbers[n2]:
                print numbers
                print numbers[n1]
                endLoop=True
        if endLoop:
            break

跟踪您使用a看到的数字,集合中已存在的第一个数字将重复:

def find_repeat(numbers):
    seen = set()
    for num in numbers:
        if num in seen:
            return num
        seen.add(num)

这是一种查找第一个重复值的有效方法,因为一旦找到它,它就不必查看其余的数字。

使用a跟踪您看到的数字,集合中已存在的第一个数字将重复:

def find_repeat(numbers):
    seen = set()
    for num in numbers:
        if num in seen:
            return num
        seen.add(num)

这是一种查找第一个重复值的有效方法,因为一旦找到它,它不必查看其余的数字。

您应该检查
n1!=n2

因为您的程序将检查
numbers[1]==numbers[1]
并在
1
位置打印值,即使只有一个值等于
numbers[1]

因此,代码如下所示:

for n1 in range(0,len(numbers)):
    for n2 in range(1,len(numbers)):
        if numbers[n1]==numbers[n2] and n1 != n2:
            print numbers
            print numbers[n1]
            endLoop=True
    if endLoop:
        break

您应该检查
n1!=n2

因为您的程序将检查
numbers[1]==numbers[1]
并在
1
位置打印值,即使只有一个值等于
numbers[1]

因此,代码如下所示:

for n1 in range(0,len(numbers)):
    for n2 in range(1,len(numbers)):
        if numbers[n1]==numbers[n2] and n1 != n2:
            print numbers
            print numbers[n1]
            endLoop=True
    if endLoop:
        break
这是一条单行线

set([x for x in _list if _list.count(x) > 1])
这是一条单行线

set([x for x in _list if _list.count(x) > 1])

如果您不介意使用numpy:

numbers = [1,2,3,4,5,3]
counts = np.bincount( numbers )
np.where([ counts > 1 ])[1]

。。。如果您不介意使用numpy,将获得数组([3])

numbers = [1,2,3,4,5,3]
counts = np.bincount( numbers )
np.where([ counts > 1 ])[1]

。。。将获得数组([3])

有一种更简单的方法。使用.count()关键字。 你可以这样做

for n in numbers:
    if numbers.count(n)>1:
        print("Repeated number: ",n)

有一种更简单的方法可以做到这一点。使用.count()关键字。 你可以这样做

for n in numbers:
    if numbers.count(n)>1:
        print("Repeated number: ",n)

如果存在多个重复值,会发生什么情况?没有重复值?如果值的重复次数比其他值多,这有关系吗?始终只有一个重复值。谢谢你的评论,现在就编辑这篇文章?如果存在多个重复值,会发生什么情况?没有重复值?如果值的重复次数比其他值多,这有关系吗?始终只有一个重复值。谢谢你的评论,现在就编辑这篇文章?set()到底做什么?最后一行。@FUtoFarai创建一个空集合,然后在集合中添加数字,如果它符合condition@FutoFarai:集合包含唯一的值,测试成员资格非常有效
seen.add()
向集合中添加一个值,
num in seen
测试集合中是否已经存在一个值。这是非常低效的,因为与
set
相关的操作需要很多时间。@cupidon4uk:不,它们不需要很多时间。添加到集合以及成员资格测试都是O(1)恒定时间操作,请参阅。你有相反的证据吗?set()到底做什么?最后一行。@FUtoFarai创建一个空集合,然后在集合中添加数字,如果它符合condition@FutoFarai:集合包含唯一的值,测试成员资格非常有效
seen.add()
向集合中添加一个值,
num in seen
测试集合中是否已经存在一个值。这是非常低效的,因为与
set
相关的操作需要很多时间。@cupidon4uk:不,它们不需要很多时间。添加到集合以及成员资格测试都是O(1)恒定时间操作,请参阅。你有相反的证据吗?这是非常低效的;每个
test.count()
调用都会对列表进行完整扫描以对元素进行计数。您还对任何重复的元素重复计数。这是非常低效的;每个
test.count()
调用都会对列表进行完整扫描以对元素进行计数。您也在重复任何重复元素的计数。这正是我要查找的。谢谢正是我想要的。谢谢这确实需要再次进行完全扫描。因为OP只需要第一个重复的数字,所以它可以用更少的工作来解决。你说得很对。此解决方案只有在阵列相当短和/或速度不是大问题的情况下才能正常工作。这确实需要再次进行完全扫描。因为OP只需要第一个重复的数字,所以它可以用更少的工作来解决。你说得很对。此解决方案只有在阵列较短和/或速度不是大问题的情况下才能正常工作。欢迎使用stackoverflow。这并不能回答这个问题。一旦你有足够的声誉,你将能够评论任何帖子;相反,提供不需要提问者澄清的答案。欢迎使用stackoverflow。这并不能回答这个问题。一旦你有足够的声誉,你将能够评论任何帖子;相反,提供不需要提问者澄清的答案。