我不知道这两件事是如何工作的,以及它们的输出。如果有更好的方法可以完成相同的工作。
代码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:
[[],[]]
答案 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”。