【发布时间】: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)方法会删除列表中第一次出现的 valuex。如果要删除部分列表,请使用del运算符(例如del a[5]删除第六个元素,del a[1:4]删除第二个、第三个和第四个元素)。
标签: arrays algorithm python-2.7