[英]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 上自己的代碼現在給出了錯誤的答案。
這是我的系統配置:
我的朋友在 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.