【问题标题】:Passing a list as an index to assign values in an n-dimensional nested list将列表作为索引传递以在 n 维嵌套列表中分配值
【发布时间】:2019-07-17 18:11:42
【问题描述】:

我会将任意维度的嵌套数组表示为 lists(不是 numpy 数组)。例如,这是一个尺寸为 4x3x2 的示例 mylist

  [[[0, 0], [0, 0], [0, 0]],
   [[0, 0], [0, 0], [0, 0]],
   [[0, 0], [0, 0], [0, 0]],
   [[0, 0], [0, 0], [0, 0]]]

现在,给定一个代表索引的列表,我将如何将该列表的相应索引(长度等于mylist 中的维数)设置为值?例如,如果将[2, 0, 1] 传递给函数,我将如何将mylist 变成

  [[[0, 0], [0, 0], [0, 0]],
   [[0, 0], [0, 0], [0, 0]],
   [[0, X], [0, 0], [0, 0]],
   [[0, 0], [0, 0], [0, 0]]]

我尝试逐步设置一个指针(不确定这是否是正确的术语)变量来实现这一点,例如res= mylist; res = res[2]; ...; res[1] = X 但这不会产生预期的结果。 重要的是,mylist 的确切尺寸事先并不知道,因此它也可能是一个 4x3x2x8 数组。

【问题讨论】:

  • 您的问题标题和问题描述清楚地表明索引必须以列表的形式出现。从您的 cmets 来看,您似乎对 @Fukiyel 不满足该要求的答案感到满意(索引作为单独的 args 传递)t。您可能需要编辑您的问题以反映您的真实需求。
  • @fountainhead 是否存在无法打印列表的情况?
  • 我的立场是正确的。该答案确实符合您的要求,但使用部分可能已显示为索引列表的一部分。

标签: python list recursion multidimensional-array


【解决方案1】:

吸气剂

这是一个函数,它接受 args 你的列表,然后是你的索引。

def accessor(array: list, *indexes: int):
    return array if not len(indexes) else accessor(array[indexes[0]], *indexes[1:])

用法

print(mylist[2][0][1] is accessor(mylist, 2, 0, 1))

是的


二传手

为了能够编辑这些值,这里还有另一个功能。首先是列表,然后是您要放置的值,以及在哪个索引系列。

def replacor(array: list, value, *indexes: int):
    accessor(array, *indexes[:-1])[indexes[-1]] = value

用法

mylist = [0, 0, [[0, 0]]]
replacor(mylist, "hi !", 2, 0, 1)
print(mylist)

[0, 0, [[0, '嗨!']]]

【讨论】:

  • 有趣的事实:几天前,我需要、搜索并没有找到一种方法来做你想做的事,但我得到了朋友的帮助。我不敢相信我不是唯一一个寻找方法的人。
  • 这似乎返回了有问题的列表的值(我稍后会真正需要的功能!);是否可以将其扩展到列表中的 assign 值?
  • 好了,添加了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2019-01-05
  • 2014-03-18
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多