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。这并不能回答这个问题。一旦你有足够的声誉,你将能够评论任何帖子;相反,提供不需要提问者澄清的答案。