在另一个列表中追加一个列表

时间:2019-07-13 03:59:13

标签: python python-3.x list nested-lists

我不知道这两件事是如何工作的,以及它们的输出。如果有更好的方法可以完成相同的工作。

代码1:

A = []
s = []
for i in range(0,int(input())):
    name = input()
    score = float(input())
    s.append(name)
    s.append(score)
    A.append(s)
    s = []
print(A)

输出1:

[['firstInput', 23.33],['secondInput',23.33]]

代码2:

A = []
s = []
for i in range(0,int(input())):
    name = input()
    score = float(input()) 
    s.append(name)
    s.append(score)
    A.append(s)
    s.clear()
print(A)

输出2:

[[],[]]

4 个答案:

答案 0 :(得分:3)

有更好的方法,但是您根本不需要列表s

A = []

for i in range(0,int(input())):
    name = input()
    score = float(input())

    A.append([name,score])

print(A)

答案 1 :(得分:1)

这是预期的列表行为。 Python使用引用将元素存储在列表中。使用append时,它只是将对s的引用存储在A中。当清除列表s时,它也会在A中显示为空白。如果要在A中创建列表的独立副本,可以使用copy方法。

答案 2 :(得分:1)

您可以使用list comprehension来获得结果:-

A = [ [ x for x in input("Enter name And score with space:\t").split() ] 
    for i in range(0, int(input("Enter end range:\t")))]
print(A)

输出

Enter end range:    2
Enter name And score with space:    rahul 74
Enter name And score with space:    nikhil 65
[['rahul', '74'], ['nikhil', '65']]

答案 3 :(得分:0)

当您将列表“ A”与列表“ s”附加在一起时,它会在“ A”中创建对“ s”的引用,这就是为什么每次在“ s”上调用.clear方法时都会清除以及“ A”中的元素。

在代码1中,您将初始化一个具有相同名称“ s”的新列表,一切正常。

在代码2中,您在“ s”上调用.clear方法,这会导致问题。

为了使用代码2并获得预期的结果,您可以执行以下操作:

A = []
s = []
for i in range(0,int(input())):
    name = input()
    score = float(input()) 
    s.append(name)
    s.append(score)
    A.append(s[:])    # It copies the items of list "s"
    s.clear()
print(A)

或者BenT回答时也可以不带“ s”。