我想创建两个列表(" lstA"," lstB"),每个列表由50个随机数组成。然后我想比较两个列表以及我想要放入第三个列表的任何重叠(" lstOvrlp")。然后我想把第三个列表的长度放到第四个列表中(" lstC")。
接下来我希望该基本程序循环10次(我稍后将为此部分添加用户输入)。
这是我到目前为止的代码:
def main():
import random
lstA = []
lstB = []
lstC = []
lstA = random.sample(range(1, 101), 50)
lstB = random.sample(range(1, 101), 50)
lstOvrlp = set(lstA) & set(lstB)
while len(lstC) <= 10:
print("This is list A:", lstA)
print("\n")
print("This is list B:", lstB)
print("\n")
print("This is the overlap between the two lists:", lstOvrlp)
numinC = len(lstOvrlp)
print("Number in common: ", numinC)
print("\n")
lstC.append(numinC)
print(lstC)
main()
问题在于,每次通过循环时,程序只是重复使用相同的数字,而不是在每次重复使用相同的数字,导致相同的重叠数,因此在&#34; lstC&#34中相同的长度;。也许在Random中还有其他一些我不知道的功能,但是我无法找到它。
我希望在&#34; lstA&#34;中有一批新的号码。和&#34; lstB&#34;每次程序循环,以便&#34; lstC&#34;最终会有不同的条目。我试图让一些练习使用数据,最后我会对这些信息进行一些简单的统计分析,比如平均值,什么不是。
虽然我无法指出这里的错误,但我可以保证有很多错误,所以请耐心等待。
由于
答案 0 :(得分:1)
我使用生成器和random.randint
然后将列表作为集合进行比较以获得交集。
from random import randint
def random_list():
for _ in range(50):
yield randint(1, 101)
list_c = []
for _ in range(10):
list_a = list(random_list())
list_b = list(random_list())
print('list_a: {}'.format(list_a))
print('list_b: {}'.format(list_b))
# This is actually called an intersection, not an overlap.
list_intersect = set(list_a) & set(list_b)
print('list_overlap: {}'.format(list_intersect))
list_c.append(len(list_intersect))
print(list_c)
答案 1 :(得分:0)
Python中的程序按顺序运行。也就是说,当它看到一个赋值时,它执行该赋值然后离开它。如果在循环之前进行赋值,那么该循环的每次迭代的值都是相同的。如果您在内部进行分配循环,它将在每次迭代时更改。我相信你想要的是后者。
而不是
lstA = random.sample(range(1, 101), 50)
lstB = random.sample(range(1, 101), 50)
lstOvrlp = set(lstA) & set(lstB)
while len(lstC) <= 10:
...
考虑
while len(lstC) <= 10:
lstA = random.sample(range(1, 101), 50)
lstB = random.sample(range(1, 101), 50)
lstOvrlp = set(lstA) & set(lstB)
...
答案 2 :(得分:0)
你非常接近!您只需将lstA = random.sample(range(1, 101), 50)
和lstB = random.sample(range(1, 101), 50)
移至while循环内,即可为其分配新数字。试试这个。
import random
def main():
while len(lstC) <= 10:
lstA = random.sample(range(1, 101), 50)
lstB = random.sample(range(1, 101), 50)
lstOvrlp = set(lstA) & set(lstB)
print("This is list A:", lstA)
print("\n")
print("This is list B:", lstB)
print("\n")
print("This is the overlap between the two lists:", lstOvrlp)
numinC = len(lstOvrlp)
print("Number in common: ", numinC)
print("\n")
lstC.append(numinC)
print(lstC)
main()
答案 3 :(得分:0)
您的问题是,在while
循环中,您不会更改lstA
,lstB
或lstC
。相反,请尝试以下方法:
def main():
import random
lstA = []
lstB = []
lstC = []
while len(lstC) <= 10:
lstA = random.sample(range(1, 101), 50)
lstB = random.sample(range(1, 101), 50)
lstOvrlp = set(lstA) & set(lstB)
print("This is list A:", lstA)
print("\n")
print("This is list B:", lstB)
print("\n")
print("This is the overlap between the two lists:", lstOvrlp)
numinC = len(lstOvrlp)
print("Number in common: ", numinC)
print("\n")
lstC.append(numinC)
print(lstC)
main()