我无法正确显示列表

时间:2016-11-15 06:01:08

标签: python-3.x

list2 = []
q = int(input("Quantos contatos deseja adicionar? "))
for i in range(q):
    list1 = []
    nome = list1.append(input("Nome: "))
    num = list1.append(input("Número: "))
    list2.append(list1)

print(list1)
print(list2)

例如,我希望list1为

['abc', '123', 'def', '456', 'ghi', '789']

和清单2

[['abc', '123'], ['def', '456'], ['ghi', '789']]

然而它打印

['ghi', '789']

[['abc', '123'], ['def', '456'], ['ghi', '789']]

And if I put outside the range it prints

['abc', '123', 'def', '456', 'ghi', '789']

[['abc', '123', 'def', '456', 'ghi', '789'], ['abc', '123', 'def', '456', 'ghi', '789'], ['abc', '123', 'def', '456', 'ghi', '789']]

为什么要覆盖前2个元素?

3 个答案:

答案 0 :(得分:1)

答案:它会覆盖前两个元素,因为您每次都在for循环中重置它,方法是执行list1 = []

操作方法:鉴于list1是输入,如果您要将其附加到list2,则必须是新的。我建议创建一个新变量,因为它在逻辑上是不兼容的,试图让list1同时执行这两个操作。我正在使用下面的list_entry来实现您要添加到list2的内容。 list1将根据您的意愿打印。

list1 = []
list2 = []
q = int(input("Quantos contatos deseja adicionar? "))
for i in range(q):
    nome = input("Nome: ")
    num = input("Número: ")
    list1.append(nome)
    list1.append(num)
    list2.append([nome, num])

print(list1)
print(list2)

进一步说明nomenum返回为空,因为追加函数是自反的,并且对其附加的对象进行操作而不返回任何内容。

答案 1 :(得分:0)

我认为这是因为list1在循环中并且每次迭代都设置为null。

我尝试了这个,它产生了你想要的结果:

list2 = []

q = int(input('How many contacts would you like to add?: '))
list1 = []
    for i in range(q):
    tempList= []
    name = input('Name: ')
    number = input('Number: ')
    tempList.append(name)
    tempList.append(number)
    list1.append(name)
    list1.append(number)
    list2.append(tempList)

print(list1)
print(list2)

输出:

  

[' abc',' 123',' def',' 456',' ghi',& #39; 789']

     

[[' abc',' 123'],[' def',' 456'],[' ghi& #39;,' 789']]

答案 2 :(得分:0)

它被覆盖,因为每次list1都会在每次迭代中重置。 试试这个:

list2 = []
q = int(input("Quantos contatos deseja adicionar? "))
list1 = []
for i in range(q):
    list3 = []
    nome = list1.append(input("Nome: "))
    num = list1.append(input("Número: "))
    list3 = list1[(i*2):]
    list2.append(list3)

print(list1)
print(list2)

这给出了你提到的预期输出。