附加在python和嵌套列表中的for循环内

时间:2014-01-18 21:45:56

标签: python

我有以下代码并有两个问题。

  1. 使用[[0, 5, 4, 6], [0, 5, 4, 6]]时,为什么此代码会导致[[0, 5], [0, 5, 4, 6]]而非append?如果我使用extend,我会得到预期的结果,但我想要一个嵌套列表。

  2. 我希望结果为[[0, 5], [4, 6]] - 一个包含两个元素的嵌套列表。也就是说,每个问题一个(第二个参数)。那么我怎样才能改变代码来实现这个目标呢?

  3. 以下代码:

    def RandomNumbers(li, questions):
        new_list = []
        new = []
    
        if type(li) == list:
            for i in range(1, questions +1):
                for item in li:
    
                    result = randint(item[0], item[1])
                    new_list.append(result)
    
                new.append(new_list)
    
        else:
            return ""
        return new
    
    
    
    print RandomNumbers([[0, 5], [1, 6]], 2)
    

3 个答案:

答案 0 :(得分:2)

你有一些错误,请尝试这种方式:

def RandomNumbers(li, questions):
    if type(li) == list:
        new = []
        for item in li:
            new_list = []
            for i in range(questions):
                new_list.append(randint(item[0], item[1]))
            new.append(new_list)
        return new
    else:
        return ""

测试:

>>> print RandomNumbers([[0, 5], [1, 6]], 2)
[[4, 3], [6, 6]]
>>> print RandomNumbers([[0, 5], [1, 6]], 2)
[[3, 5], [3, 1]]

答案 1 :(得分:1)

如上所述,您的描述与您的代码不符。

但要回答你的问题,为什么你要两次获得相同的清单:

  1. 您创建了一个对象new_list
  2. 您将其追加到new两次。但是:您只是一直使用同一个对象,因此会添加两次并将所有项目添加到此列表中。
  3. 您可以通过在第一个for循环之后移动行new_list = []来解决这个问题。

答案 2 :(得分:0)

在迭代new_list的项目时,您会附加到同一li。您需要按照tobias_k的建议在循环中创建一个新列表 您获得[[0, 5, 4, 6], [0, 5, 4, 6]]的原因是您将new_list的引用追加到new两次,这意味着new[0]new[1]引用相同的列表。随后,第一个列表还包含在将new_list附加到new后附加到{{1}}的元素。