簡體   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