【问题标题】:Why does Python remove numbers randomly from array?为什么 Python 会从数组中随机删除数字?
【发布时间】:2016-02-09 14:04:48
【问题描述】:

我正在尝试解决 HackerRank.com 上的一个复杂问题,该问题涉及创建一个解决方案,该解决方案可以接受长度从 10 个整数到 99,000 个整数的大小数据数组。

在这里找到问题 -> https://www.hackerrank.com/challenges/array-and-simple-queries

问题

简单地说,我已经获取了一个数组,从该数组中复制用户指定的一系列数字,然后将其附加到一个新数组中。

 i = 2
 j = 4

 a = [1, 2, 3, 4, 5, 6, 7, 8]

 for numbers in range(i, j + 1):
     b.append(a[numbers - 1])

数字范围附加到 b[] 数组。在上面的示例中,这应该是 2、3、4。现在我想从 a[] 数组中删除() 2、3、4。这就是我遇到问题的地方。

 for numbers in range(i, j + 1):
     a.remove(a[i-1])

这应该删除数字 2, 3, 4 并将 a[] 数组保留为 1, 5, 6, 7, 8。这在大多数情况下都按规定工作。

但是,在更大的数组中,例如长度为 500。我看到 a.remove() 随机删除不在 i, j + 1 范围内的数字。

例子

i = 239
j = 422

它删除 a[47] 并将其放置在另一个位置,同时删除 i 到 j。我不知道为什么要使用上面指定的代码删除 a[47]。 remove() 有问题吗?

我需要什么帮助

我并不是想为我解决问题。我试图理解为什么 remove() 不能正常工作。逻辑上说它不应该从 i 到 j 删除任何东西,但它确实如此。非常感谢任何帮助。

【问题讨论】:

  • 你确定它完全适用于这个小例子吗?我得到了[1, 3, 5, 7, 8]。这实际上是我所期望的,因为我记得犯了完全相同的错误;)
  • 另外,1) 你希望.remove() 做什么?具体来说,它的论点是什么意思? 2)从数组中删除一个元素后,数组中其他元素的索引“发生”了什么?
  • 有人告诉我做 a.remove(i-1) 而不是 a.remove(a[i-1])
  • 是的,删除适用于大多数测试用例,但更大的测试用例。我将尝试上述更正,看看是否有效。
  • 从问题陈述中,我将i 和j 解释为索引。在 Python 中,列表上的 .remove(x) 方法会删除列表中第一次出现的 value x。如果要删除部分列表,请使用del 运算符(例如del a[5] 删除第六个元素,del a[1:4] 删除第二个、第三个和第四个元素)。

标签: arrays algorithm python-2.7


【解决方案1】:

数组上的.remove 方法不会通过索引删除元素,而是通过值删除元素。如果要删除部分列表,请使用 del 运算符(例如,del a[5] 删除第六个元素,del a[1:4] 删除第二、第三和第四个元素)。

(至于有效地解决这个问题:如果您以相反的顺序查看操作,我认为您不必实际操作数组。)

【讨论】:

  • 感谢您的解释。 del 是我想要从单个数组中切片和删除而不是复制到新数组并使用 .remove()
猜你喜欢
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2021-06-02
  • 2017-12-04
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多