【问题标题】:Python: adding to list of lists both out and in a for loopPython:在for循环中添加到列表列表中
【发布时间】:2020-03-23 05:14:11
【问题描述】:

我想在 for 循环外创建一个索引值为 0 的新列表,然后使用 for 循环添加到同一个列表中。我的玩具例子是:

import random

data = ['t1', 't2', 't3']

masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']

for item in data:
    masterlist.append([item])
    for animal in animals:
        number1 = random.randint(1, 100)
        number2 = random.randint(1, 100)
        masterlist.append([str(number1) + ',' + str(number2)])

masterlist  

但是这个输出:

[['col1', 'animal1', 'animal2', 'animal3'],
 ['t1'],
 ['52,69'],
 ['8,77'],
 ['75,66'],
 ['t2'],
 ['67,33'],
 ['85,60'],
 ['98,12'],
 ['t3'],
 ['60,34'],
 ['25,27'],
 ['100,25']]

我想要的输出是:

[['col1', 'animal1', 'animal2', 'animal3'],
 ['t1', '52,69', '8,77', '75,66'], 
 ['t2', '67,33', '85,60', '98,12'],
 ['t3', '60,34', '25,27', '100,25']]

【问题讨论】:

    标签: python list for-loop random nested-lists


    【解决方案1】:

    您还可以按如下方式使用列表推导:

    import random
    
    data = ['t1', 't2', 't3']
    
    masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
    animals = ['cat', 'dog', 'chinchilla']
    
    for d in data:
         rv = [d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals]
    
    masterlist.append(rv)
    

    或者在单个列表理解中更加核心:

    masterlist+= [[d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals] for d in data]
    

    【讨论】:

      【解决方案2】:

      这个稍微重构你的代码的解决方案怎么样?

      解决方案 1

      import random
      
      data = ['t1', 't2', 't3']
      
      masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
      animals = ['cat', 'dog', 'chinchilla']
      
      for item in data:
          rv = []
          rv.append(item)
          for animal in animals:
              number1 = random.randint(1, 100)
              number2 = random.randint(1, 100)
              rv.append(str(number1) + ',' + str(number2))
          masterlist.append(rv)
      

      输出:

      >>> masterlist
      [['col1', 'animal1', 'animal2', 'animal3'],
       ['t1', '88,43', '85,62', '84,21'],
       ['t2', '44,99', '32,54', '83,50'],
       ['t3', '82,87', '90,83', '91,84']]
      

      或者,以下将给出相同的结果。

      解决方案 2

      import random
      
      data = ['t1', 't2', 't3']
      
      masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
      animals = ['cat', 'dog', 'chinchilla']
      
      for item in data:
          masterlist.append([item] + [f"{random.randint(1, 100)},{random.randint(1, 100)}" for animal in animals])
      

      【讨论】:

        【解决方案3】:

        你可以做这样的事情。使用temp 列表来存储每次迭代的项目。 此外,您在追加时使用了许多方括号,这导致列表过于嵌套。

        import random
        
        data = ['t1', 't2', 't3']
        
        masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
        animals = ['cat', 'dog', 'chinchilla']
        
        for item in data:
            temp = []
            temp.append(item)
            for animal in animals:
                number1 = random.randint(1, 100)
                number2 = random.randint(1, 100)
                temp.append(str(number1) + ',' + str(number2))
            masterlist.append(temp)
        
        print(masterlist)
        

        【讨论】:

          猜你喜欢
          • 2016-08-25
          • 2015-01-29
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多