【问题标题】:Print an array with lists as elements打印一个以列表为元素的数组
【发布时间】:2015-09-08 06:51:27
【问题描述】:

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

在:

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

【问题讨论】:

  • FWIW,你的“数组”v 是一个列表,所以称它为array 有点混乱。
  • 传递r=Test 并说v[i] = r() 以创建Test 的新实例
  • 我照你说的做了,彼得并且工作了。谢谢!

标签: python arrays list printing


【解决方案1】:

不,您正在显示数组的所有元素。它们都指向同一个对象,因此当您在read 循环中更改对象时,您会随处更改对象。您需要为数组中的每个位置创建一个新的 Test 对象。

【讨论】:

  • 你是对的,我删除了“t = Test()”,并在“read”的“for”中直接输入了“v[i] = Test()”并开始工作:)。谢谢!
【解决方案2】:

因为这只是一个 t。 第一个值总是被最后一个值覆盖。

你可以在 "read()" 的 "for" 中写 "print (v[i].name)" ,你可以看到差异。 你应该创建一个新的 t。

【讨论】:

  • 我在“read()”中添加了一个打印,但看起来还可以。输出:5; 0; 6; 0; 2 6; 2; 7; 3; 3
【解决方案3】:

我不是 python 专家,但你可以尝试使用 isinstance() 这可以帮助你通过将数组值与列表进行比较来打印指定列表的所有值。如果它是一个列表,那么打印那个特定的列出元素。如果不是列表,则打印正常的数组值。

https://infohost.nmt.edu/tcc/help/pubs/python/web/isinstance-function.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多