Python 打印列表为元素的数组

Python 打印列表为元素的数组,python,arrays,list,printing,Python,Arrays,List,Printing,我开始创建一个数组,然后用列表引用它的元素。现在我想打印整个数组(这是:数组上的所有列表),我创建了一个函数“show”和“show array”,但总是打印数组的最后一个元素 在: 输出: 不,您正在显示数组的所有元素。它们都指向同一个对象,因此当您在read循环中更改对象时,您可以在任何地方更改对象。您需要为数组中的每个位置创建一个新的Test对象。因为这只是一个t。 第一个值总是被最后一个值覆盖 您可以在“read()”的“for”中写入“print(v[i].name)”,您可以看到差异

我开始创建一个数组,然后用列表引用它的元素。现在我想打印整个数组(这是:数组上的所有列表),我创建了一个函数“show”和“show array”,但总是打印数组的最后一个元素

在:

输出:


不,您正在显示数组的所有元素。它们都指向同一个对象,因此当您在
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