Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的计算机中的Python列表不';你不能持有超过693个号码吗?_Python_List_Python 3.x_Ubuntu - Fatal编程技术网

为什么我的计算机中的Python列表不';你不能持有超过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:

前几天我在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)
以下是完整的代码:

我曾在一个在线编辑器上尝试过这段代码,它成功了,但有一个例外:模式与实际数字相差甚远

我认为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无关,它将是输入。