我正在尝试在列表中生成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())
我的程序总是返回false,与生成的列表无关。
答案 0 :(得分:1)
您的代码中出现了
您要对元素进行迭代,然后减去它们并进行比较,而应该对索引进行迭代,并使用它们来比较连续的元素
您正在for循环中调用insertion_sort()
,我认为这是错误的
您想在找到的第一个匹配项上中断for循环,最后返回一个布尔值,该值指示匹配项是否发生
所以您的代码看起来像
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
答案 1 :(得分:0)
您在这里有两个选择:如果您不关心顺序,则可以使用set
,这是一种只能具有唯一元素的数据类型。如果您需要保持数字的原始顺序,则需要使用OrderedDict
中的collections
答案 2 :(得分:0)
您在def验证()中的循环:在第一次迭代后退出,因为否则:返回False(正在退出)
使用简单标志:
@Entity(tableName = "recents",primaryKeys = {"imageLink","catagoryId"})
public class Recents {
@ColumnInfo(name="imageLink")
@NonNull
private String imageLink;
@ColumnInfo(name="catagoryId")
@NonNull
private String catagoryId;
@ColumnInfo(name="saveTime")
private String saveTime;
@ColumnInfo(name = "key")
private String key;
public Recents(@NonNull String imageLink, @NonNull String catagoryId, String saveTime, String key) {
this.imageLink = imageLink;
this.catagoryId = catagoryId;
this.saveTime = saveTime;
this.key = key;
}
@NonNull
public String getImageLink() {
return imageLink;
}
public void setImageLink(@NonNull String imageLink) {
this.imageLink = imageLink;
}
@NonNull
public String getCatagoryId() {
return catagoryId;
}
public void setCatagoryId(@NonNull String catagoryId) {
this.catagoryId = catagoryId;
}
public String getSaveTime() {
return saveTime;
}
public void setSaveTime(String saveTime) {
this.saveTime = saveTime;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
答案 3 :(得分:0)
您的验证功能有误。您正在将元素i的值与元素i-1的值进行比较,这永远都是不正确的。试试这个:
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())
答案 4 :(得分:0)
您可以使用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)