繁体   English   中英

为什么我的计算机中的 Python 列表不包含超过 693 个数字?

[英]Why do Python lists in my computer don't hold more than 693 numbers?

前几天我正在解决 HackerRank 中 10 天统计问题的第 0天。 我的解决方案非常简单,几乎适用于所有测试用例。 我的代码失败的那个有 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这是发生的事情: 1:他说,他的代码有效。 我运行了它,它也可以在我的 PC 上运行! 这是第一次。 2:我给了他我的代码,然后自己再次运行。 我看到只有 693 个元素,他报告了相同的内容。 3:也许最令人惊讶的是,他自己的版本给出了同样的索引错误和大小为693的数组! 我朋友在他自己的 PC 上自己的代码现在给出了错误的答案。

这是我的系统配置:

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

我的朋友在 Ubuntu 14.04 上使用 Python 3.4.3。

我不知道为什么您在本地机器上运行代码时会遇到此限制,但是,我强烈怀疑这是由于您的输入数据 - 可能是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])

注意还有一个问题,你需要将平均值和中值四舍五入到小数点后一位,但是这个错误并没有被HackerRank的测试数据暴露出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM