我看不到我的列表中是否有重复的数字

I cant see if my list has repeated numbers in it

我正在尝试在我的列表中生成 20 个随机数。接下来我想看看里面有没有重复的数字

我生成了随机数。接下来我做了一个插入排序,以便按增长的顺序排列列表。为了查看我是否有任何重复的数字,我遍历了列表,如果前一个数字等于下一个数字,那么我的列表中有重复的数字。

import random

random_array=[]

def array():
  for i in range(0,20):
    random_element=random.randint(1,35)
    random_array.append(random_element)
  return random_array
print(array())

# function to order the list
def insertion_sort():
  for i in range(1,len(random_array)):
    while i>0 and random_array[i-1]>random_array[i]:
      random_array[i-1],random_array[i]=random_array[i],random_array[i-1]
      i=i-1
  return random_array
print(insertion_sort())

def verification():
  for i in random_array:
    insertion_sort()
    if i-1==i:
      return True
    else:
      return False
print(verification())

我的程序总是 returns false,独立于生成的列表。

这里你有两个选择:如果你不关心顺序,你可以使用 set,这是一种只能有唯一元素的数据类型。如果您需要保留原来的数字顺序,则需要使用 OrderedDict from collections

查看此堆栈答案:

您在 def verification() 中的循环:在第一次迭代后退出,因为 if else: return False(正在退出)

使用简单标志:

import random

random_array=[]

def array():
  for i in range(0,20):
    random_element=random.randint(1,35)
    random_array.append(random_element)
  return random_array
print(array())

# function to order the list
def insertion_sort():
  for i in range(1,len(random_array)):
    while i>0 and random_array[i-1]>random_array[i]:
      random_array[i-1],random_array[i]=random_array[i],random_array[i-1]
      i=i-1
  return random_array
print(insertion_sort())

def verification():
  #for i in random_array:
  status = False # <----
  for i in range(len(random_array)-1): # <------
    insertion_sort()
    #if i-1==i:
    if random_array[i] == random_array[i+1]: # Iterate over list by indexes
      status = True
      break 
  return status
print(verification())

你的验证函数有误。您正在将元素 i 的值与元素 i - 1 的值进行比较,这永远不会为真。试试这个:

insertion_sort()
for i in range(1,len(random_array - 1)):
    if random_arry[i] == random_array[i-1]:
        return True
return False  # If you get through every element without finding a match, return False

你可以用更短的代码使用 itertools.Counter:

import random
from collections import Counter

# Generate a random array
random_array = [random.randint(1, 35) for _ in range(20)]


nums = [
    n  # A number
    for (n, count) in Counter(random_array).items()  # From countered items
    if count > 1  # If the count of this number is more than one
]
print(nums)

您的代码中的问题:

  • 您正在迭代元素并减去它们并进行比较,相反您应该迭代索引并使用它们来比较连续的元素

  • 你在你的 for 循环中调用 insertion_sort(),我假设是错误的

  • 您想在找到的第一个匹配项上打破 for 循环,并在最后 return 一个布尔值来判断匹配项是否发生

所以你的代码看起来像

def verification():
    #Flag to keep track of matches
    flag = False
    #Iterate over list via indexes
    for i in range(len(random_array)):
        #If consecutive elements match, set flag to true and break loop
        if random_array[i-1]==random_array[i]:
            flag = True
            break
    #Return flag value
    return flag