【问题标题】:While Loop Step not working with nested array?虽然循环步骤不适用于嵌套数组?
【发布时间】:2019-05-02 13:33:19
【问题描述】:

我正在尝试更改数组的每个第二个元素中的某些内容。在那个元素中,我只想修改第 5 个元素(它是一个数组数组)。我想通过在我的 while 循环中执行 2 步来做到这一点。因此我添加了i += 2

现在很奇怪: 当我只输入: PaylikeTableWithFee[i] = 'hello' 然后它就可以工作了,只有每隔一个数组被修改并设置为 'hello'。

但是,当我这样做时: PaylikeTableWithFee[i][5] = 'hello' 然后每个数组都被修改,尽管循环的步长为 2。

i = 1
while i < len(PaylikeTableWithFee):

    PaylikeTableWithFee[i][5] = 'hello'

    i += 2

通常只需要编辑主数组中每 2 个数组的第 5 个元素。

【问题讨论】:

  • 什么是PaylikeTableWithFee?数组?在那种情况下是什么数组?
  • 你可能想要slice 喜欢arr[1::2]
  • 欢迎来到 SO。请完成游览,您将了解How ask a question 并将问题相应地修改为Complete, and Verifiable working example。如果不发布您的代码,您可能会删除您的问题。使用您声明的跟踪和错误代码......人们更愿意帮助您,因此我们都可以学习。尽情享受吧 ;-)
  • @scenatic 您需要定义更多关于如何声明 PaylikeTableWithFee 因为这可能是问题所在。如果我将其定义为PaylikeTableWithFee = [[0] * 6,[0] * 6,[0] * 6,[0] * 6,[0] * 6],则只有每隔一个元素中的第一个元素会根据需要更改。

标签: python arrays loops while-loop


【解决方案1】:

问题可能在于您创建数组的方式。我怀疑你用PaylikeTableWithFee = [[0,1,2,3,4,5]] * n 之类的东西装箱了。这只会创建一个内部数组PaylikeTableWithFee,然后将是一个具有相同引用n 次的数组。因此使用PaylikeTableWithFee[0][5] = 'hello' 会改变(看起来像)每个内部数组。

确保PaylikeTableWithFee不同的内部数组,例如PaylikeTableWithFee = [[0,1,2,3,4,5] for _ in n]

【讨论】:

  • 好吧,我创建它的方式如下: for i in range(len(PaylikeTable)): if (i == 0): PaylikeTableWithFee.append(PaylikeTable[i]) else: PaylikeTableWithFee.append( PaylikeTable[i]) PaylikeTableWithFee.append(PaylikeTable[i]) 所以我猜你的答案是解决方案,但我还不知道如何在代码上实现它。 Payliketable 是另一个由数组组成的数组,我想复制它的每个数组。
  • 如果支付表只存储简单的整数/浮点数/等,而不是 PaylikeTableWithFee.append(PaylikeTable[i]) 而不是 PaylikeTableWithFee.append(PaylikeTable[i].copy())。否则,请尝试查看 copy 模块,特别是 copy.deepcopy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 2018-08-20
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多