我开始创建一个数组,然后我用列表引用它的元素。现在我要打印整个数组(这是:数组上的所有列表),我创建了一个函数" show"和"显示数组"但总是打印数组的最后一个元素
在:
class Test:
pass
def read(v, r):
n = len(v)
for i in range(0, n):
v[i] = r
v[i].number= 5+i
v[i].name = i*2
v[i].author = i+6
v[i].genre = i*3
v[i].quantity = i+2
def show_array(v):
n = len(v)
for i in range(0, n):
show(v[i])
def show(reg):
print(reg.number, end=' ; ')
print(reg.name, end=' ; ')
print(reg.author, end=' ; ')
print(reg.genre, end=' ; ')
print(reg.quantity)
def menu():
v = 2 * [None]
t= Test()
read(v, t)
show_array(v)
menu()
OUT:
6 ; 2 ; 7 ; 3 ; 3
6 ; 2 ; 7 ; 3 ; 3
答案 0 :(得分:2)
不,您正在显示数组的所有元素。它们都指向相同的对象,因此当您在read
循环中更改对象时,您可以在任何地方更改对象。您需要为数组中的每个位置创建一个新的Test
对象。
答案 1 :(得分:0)
因为这只是一个。 第一个值总是被最后一个值覆盖。
您可以在“read()”的“for”中写“print(v [i] .name)”,您可以看到差异。 你应该创建一个新的。
答案 2 :(得分:0)
我不是python专家,但你可以尝试使用isinstance()这可以帮助你通过比较数组值和list来打印指定列表的所有值。如果它是一个列表然后打印该特定列表元素。如果它不是列表,则打印正常的数组值。
https://infohost.nmt.edu/tcc/help/pubs/python/web/isinstance-function.html