【问题标题】:New list every While loop每个 While 循环的新列表
【发布时间】:2018-06-09 07:51:07
【问题描述】:

我想创建两个列表(“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()

问题在于,程序不是每次通过循环都吐出随机数,而是一遍又一遍地重复使用相同的数字,从而导致相同的重叠数,从而导致“lstC”中的长度相同。也许 Random 中还有一些我不知道的其他功能,但我找不到它。

我希望每次程序循环时在“lstA”和“lstB”中有一批新的数字,以便“lstC”以不同的条目结束。我正在尝试使用数据进行一些练习,最终我将对这些信息进行一些简单的统计分析,例如平均值等等。

虽然我无法指出此处存在的错误,但我可以保证其中存在大量错误,因此请耐心等待。

谢谢

【问题讨论】:

  • 您应该将random.sample 一代放在 while 循环中。否则,您生成它们(一次)并 then 循环,但不会再次生成随机样本
  • 如果您不更改它们,您希望它们如何更改?
  • 你应该在循环中生成这些样本 - lstA 和 lstB :)

标签: python list random while-loop


【解决方案1】:

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】:

    你已经很接近了!您只需将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】:

      您的问题是在您的 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()
      

      【讨论】:

        【解决方案4】:

        我会使用生成器和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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-06
          • 2014-08-21
          • 2018-07-19
          • 1970-01-01
          • 2020-02-11
          • 2021-11-13
          • 2011-06-23
          • 2020-07-17
          相关资源
          最近更新 更多