为什么我的计算机中的Python列表不';你不能持有超过693个号码吗?
前几天我在HackerRank解决了10天的统计问题。我的解决方案非常简单,几乎适用于所有测试用例。我的代码失败的那一个有2500个数字作为输入。我放了几张照片来看看这是怎么发生的,发现我的数字列表中只有693个值 以下是查找中间值的部分:为什么我的计算机中的Python列表不';你不能持有超过693个号码吗?,python,list,python-3.x,ubuntu,Python,List,Python 3.x,Ubuntu,前几天我在HackerRank解决了10天的统计问题。我的解决方案非常简单,几乎适用于所有测试用例。我的代码失败的那一个有2500个数字作为输入。我放了几张照片来看看这是怎么发生的,发现我的数字列表中只有693个值 以下是查找中间值的部分: number_of_items = int(input().strip()) inputs = list(map(int, input().split(' '))) inputs.sort() if (number_of_items % 2) == 0:
number_of_items = int(input().strip())
inputs = list(map(int, input().split(' ')))
inputs.sort()
if (number_of_items % 2) == 0:
n = number_of_items // 2 - 1
median = (inputs[n] + inputs[n+1])/2
else:
n = number_of_items // 2
median = inputs[n-1]
print(median)
以下是完整的代码:
我曾在一个在线编辑器上尝试过这段代码,它成功了,但有一个例外:模式与实际数字相差甚远
我认为Python列表可以容纳大量的数字!为什么它不能在我的电脑上工作
编辑:我有一个朋友自己解决了这个问题,并把结果告诉了我。然后告诉他运行我的代码,告诉我他看到了什么。这是他的密码:
发生的情况如下:
1:他说,他的代码起作用了。我运行了它,它也在我的电脑上工作!这是第一次。
2:我给了他我的代码,然后自己再运行一次。我看到只有693个元素,他报告了同样的情况。
3:也许最令人惊讶的是,他自己的版本给出了同样的索引外错误和一个693大小的数组!我朋友自己电脑上的代码现在给出了错误的答案
这是我的系统配置:
- 英特尔酷睿i5,第五代
- 8GB内存,1600 MHz总线速度
- Ubuntu 16.04.1
- Python 3.5.2
我的朋友正在Ubuntu 14.04上使用Python 3.4.3。我不知道您在本地计算机上运行代码时为什么会遇到这种限制,但是,我强烈怀疑这是由于您的输入数据造成的-可能是您建议的一个错误的新行字符 HackerRank出现的问题是由于您的模式计算:
# mode
occurances = {n: inputs.count(n) for n in inputs}
mode = min(occurances)
print(mode)
这总是从输入中选择最低的值,而不是最常出现的值中的最低值。有一种方法可以做到这一点:
from collections import Counter
c = Counter(inputs)
max_count = c.most_common(1)[0][1]
print(sorted([x for x in c if c[x] == max_count])[0])
请注意,还有另一个问题,您需要将平均值和中值四舍五入到小数点后1位,但HackerRank的测试数据不会暴露此错误。Python没有此类限制。你确定你正在传递2500个数字,并且没有意外地在某处放置一个换行符吗?为什么要同时读取输入的数量和输入本身,而不仅仅是第二个,然后获取所创建列表的长度?你的方法可能会导致问题。就像
number\u of\u items=len(inputs)
@MartijnPieters No一样,我已经从HackerRank的测试用例中复制了这些数字。如果您已经阅读了HR上的问题页面,您将看到有两个输入,用换行符分隔。我手写了第一个输入,并复制粘贴了第二个输入(包含所有数字)。@Ev.Kounis请阅读黑客银行的页面了解问题,我问的问题取决于此。获取输入数量的原因是因为这在问题描述中。尽管如此,这并不是问题的原因。我是在使用len(输入)后才知道693号的。这个问题是由于输入不正确造成的。你的朋友第一次运行他的代码时,他使用了他独立获得的数据。然后你给了他你的代码和数据,现在他的代码和你的代码的行为是一样的——因为数据是不同的。请他向您提供他最初使用的数据并尝试一下。在Python失败后,我也使用Clojure编写了一个解决方案。我复制粘贴了相同的数字,结果很简单。我猜这背后有一个硬件原因,比如某个地方某个缓存内存满了或者什么的。但即使重新启动机器,问题仍然存在。我的朋友运行了代码,遇到了同样的问题,请阅读更新后的问题。哦,是的,我的模式是完全错误的-u-谢谢你指出。我想知道,它是如何通过HackerRank的所有其他案例的@拉图尔:它通过了所有其他情况,因为最小的值恰好是模式。问题与Python无关,它将是输入。