每个While循环的新列表

时间:2017-12-28 19:06:11

标签: python list random while-loop

我想创建两个列表(" 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;最终会有不同的条目。我试图让一些练习使用数据,最后我会对这些信息进行一些简单的统计分析,比如平均值,什么不是。

虽然我无法指出这里的错误,但我可以保证有很多错误,所以请耐心等待。

由于

4 个答案:

答案 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循环中,您不会更改lstAlstBlstC。相反,请尝试以下方法:

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()