为什么我电脑里的Python列表不能容纳超过693个数字?

2024-04-25 22:03:59 发布

您现在位置:Python中文网/ 问答频道 /正文

前几天我在HackerRank解决了10天的统计问题。我的解决方案非常简单,几乎适用于所有的测试用例。我的代码失败的那个有2500个数字作为输入。我放了一些指纹来看看这是怎么发生的,发现我的数字列表中只有693个值。你知道吗

下面是查找中间值的部分:

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)

下面是完整的代码:https://gist.github.com/mnzr/5a6f6c1c49d4dc0dbb940ed3ecba79ff

我曾在一个在线编辑器上尝试过这段代码,但效果不错,只有一个例外:模式与实际数字相差甚远。你知道吗

我以为Python列表可以容纳大量的数字!为什么它在我的电脑上不工作?你知道吗

编辑:我有一个朋友自己解决了这个问题,并把结果传给我。然后告诉他运行我的代码,告诉我他看到了什么。这是他的代码:https://gist.github.com/sz-ashik440/192bc22b18da0292832e65997a6787a7 事情是这样的: 他说:他的密码起作用了。我运行它,它在我的电脑上也工作!这是第一次。 他说:我把代码给了他,然后自己再运行一遍。我看到只有693个元素,他也报告了同样的情况。 3:也许最令人惊讶的是,他自己的版本给出了同样的索引外错误和一个大小为693的数组!我朋友自己电脑上的代码现在给出了错误的答案。你知道吗

这是我的系统配置:

  • 英特尔酷睿i5,第5代
  • 8GB内存,1600 MHz总线速度
  • Ubuntu 16.04.1版本
  • Python 3.5.2版

我的朋友正在ubuntu14.04上使用python3.4.3。你知道吗


Tags: of代码httpsgithubnumber列表input朋友
1条回答
网友
1楼 · 发布于 2024-04-25 22:03:59

我不知道为什么在本地机器上运行代码时会遇到这种限制,但是,我强烈怀疑这是由于输入数据造成的—可能是Martijn Pieters建议的一个不规则的新行字符。你知道吗

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的测试数据不会暴露此错误。你知道吗

相关问题 更多 >