我看不到我的列表中是否有重复的数字
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
我正在尝试在我的列表中生成 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