Python 打印列表为元素的数组
我开始创建一个数组,然后用列表引用它的元素。现在我想打印整个数组(这是:数组上的所有列表),我创建了一个函数“show”和“show array”,但总是打印数组的最后一个元素 在: 输出:Python 打印列表为元素的数组,python,arrays,list,printing,Python,Arrays,List,Printing,我开始创建一个数组,然后用列表引用它的元素。现在我想打印整个数组(这是:数组上的所有列表),我创建了一个函数“show”和“show array”,但总是打印数组的最后一个元素 在: 输出: 不,您正在显示数组的所有元素。它们都指向同一个对象,因此当您在read循环中更改对象时,您可以在任何地方更改对象。您需要为数组中的每个位置创建一个新的Test对象。因为这只是一个t。 第一个值总是被最后一个值覆盖 您可以在“read()”的“for”中写入“print(v[i].name)”,您可以看到差异
不,您正在显示数组的所有元素。它们都指向同一个对象,因此当您在
read
循环中更改对象时,您可以在任何地方更改对象。您需要为数组中的每个位置创建一个新的Test
对象。因为这只是一个t。
第一个值总是被最后一个值覆盖
您可以在“read()”的“for”中写入“print(v[i].name)”,您可以看到差异。
您应该创建一个新的t。我不是python专家,但您可以尝试使用isinstance()这可以帮助您通过比较数组值和列表来打印指定列表的所有值。如果是列表,则打印特定的列表元素。如果不是列表,则打印普通数组值
FWIW,您的“数组”
v
是一个列表,因此将其称为一个有点混乱。通过r=Test
并说v[i]=r()
创建Test
的新实例我按照您说的做了,Peter成功了。非常感谢。我在“read()”中添加了一个打印,但看起来还可以。输出:5;0; 6.0; 2 6; 2.7.3.3你是对的,我删除了“t=Test()”,并在“read”的“for”中直接添加了“v[I]=Test()”,然后工作:)。谢谢
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()
6 ; 2 ; 7 ; 3 ; 3
6 ; 2 ; 7 ; 3 ; 3