向另一个列表中添加列表项

3

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

代码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个回答

3

有更好的方法可以做到这一点,但你根本不需要使用列表s

A = []

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

    A.append([name,score])

print(A)

第一个和第二个输出呢? - Chakma
输出将取决于input。您能澄清您的问题吗? - BenT

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

看到第一段代码,我脑海中有一个问题。为什么代码中的第9行对输出没有任何明显的影响? - Meraj al Maksud
1
当您使用s = []时,您创建了一个具有相同名称的新列表。当您使用clear时,您更改了存储在A内部的列表的值。第一种方法也不建议使用,因为它可能会导致不必要的行为。 - Ninad Gaikwad

0

当你将列表"A"与列表"s"连接起来时,它会在"A"中创建一个对"s"的引用,这就是为什么每当你调用"s"上的.clear方法时,它也会清除"A"中的元素。

在代码1中,你正在使用相同名称的新列表进行初始化,一切正常。

在代码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"。


0

你可以使用 列表推导 来获得你的结果:

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']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接