我有以下代码并有两个问题。
使用[[0, 5, 4, 6], [0, 5, 4, 6]]
时,为什么此代码会导致[[0, 5], [0, 5, 4, 6]]
而非append
?如果我使用extend
,我会得到预期的结果,但我想要一个嵌套列表。
我希望结果为[[0, 5], [4, 6]]
- 一个包含两个元素的嵌套列表。也就是说,每个问题一个(第二个参数)。那么我怎样才能改变代码来实现这个目标呢?
以下代码:
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)
答案 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)
如上所述,您的描述与您的代码不符。
但要回答你的问题,为什么你要两次获得相同的清单:
new_list
new
两次。但是:您只是一直使用同一个对象,因此会添加两次并将所有项目添加到此列表中。您可以通过在第一个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}}的元素。