【问题标题】:Python, how to pass reference to list of list (not value)Python,如何传递对列表列表的引用(不是值)
【发布时间】:2021-04-27 05:49:30
【问题描述】:

我想传递对 int 列表列表的引用,而不是 int 值本身。

我有一个整数列表列表,它代表一个根优先二叉树,我称之为aTriangle 我正在建立一个名为 path 的列表,因为我正在走下aTriangle path 正在填充对 aTriangle 的引用,格式为 aTriangle[i][j] 问题是当我尝试打印或传递 path 时,它是一个 int 值列表,而不是我放入其中的引用列表。

例如,

test_triangle = [[1], [2, 3], [4, 5, 6]]
test_list = [test_triangle[0][0], test_triangle[1][0]]
print(test_list)

打印出[1, 2](类似地,通过 test_list 传递值)

但我想要[test_triangle[0][0], test_triangle[1][0]]

如何建立一个作为参考的参考列表?或者,如果这是不可行的,我是否有另一种方法来记录与该值关联的两个索引,因为这些索引值对后面的步骤很重要。

【问题讨论】:

  • 您似乎误解了 python 列表的工作原理,当您索引列表列表时,您得到的实际上是对包含列表的引用。但是当您打印它时,python 足够聪明,可以打印引用列表的 repr 而不是 c/c++ 中的列表地址
  • 是否有另一种方法让我保留与值关联的两个索引 是的,将索引存储在test_list 中。
  • “我是否有另一种方法来保存与值关联的两个索引”.. 查找 xarray,xarray 中包含的元素存储它们所在的索引。
  • Python 总是有引用语义(虽然它既不是按值调用也不是按引用调用)
  • @Countout-Integral 你知道吗,这是完美的。这是保存索引的简单、直接的方法,当我最终需要该值时,我可以轻松调用它。谢谢!

标签: python list pass-by-reference


【解决方案1】:

你在寻找这样的东西吗?

免责声明 -> 这是纯粹的 hack,我建议寻找更复杂的 python 模块/库。

test_triangle = [[1], [2, 3], [4, 5, 6]]
test_list = (test_triangle[0][0], test_triangle[1][0])

values_and_indexes = {}

for index, value in enumerate(test_triangle):
    for _i, _v in enumerate(value):
        values_and_indexes[f"test_triangle[{index}][{_i}]"] = _v

print(values_and_indexes)

输出

{'test_triangle[0][0]': 1, 'test_triangle[1][0]': 2, 'test_triangle[1][1]': 3, 'test_triangle[2][0]': 4, 'test_triangle[2][1]': 5, 'test_triangle[2][2]': 6}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 2018-06-29
    • 2013-07-04
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多