2017-07-28 29 views
0

我想通過一系列需要按範圍排序的數據循環,然後我需要計算每個範圍內的整數。如果您連續輸入範圍(如0-101,100-201,200-301等),則以下代碼有效。 有沒有辦法編寫此代碼,以便我不必輸入每個範圍?從number.txt將多個範圍應用到一個列表

import collections 
first_range = [ ] 
f = open("numbers.txt") 
count1 = collections.Counter() 
for line in f: 
    for number in line.split(): 
     count1.update((number,)) 
     if number > '0' and number < '101': 
      first_range.append(number) 
print(len(first_range)) 

示例數據: [209,166,38]

預期輸出: 0-101 = X 100-201 = Y 等

+0

你能提供'numbers.txt'中的數據和預期輸出的例子嗎? – Wondercricket

+0

@Wondercricket完成:) –

+0

像你的例子一樣,所有的固定長度的範圍?它們是否包含範圍內的第一個數字,並排除最後一個數字,也就像你的例子? – jack6e

回答

0

維護一個上限,在已排序的列表中迭代,當數量超過限制時,增加數量爲100

import random 
lisst = [209, 166, 38, 1090, 1091, 1092, 1099, 2011] 
cnts = [] 
cnt = 0 
up = 100 
for num in sorted(lisst): 
    if num <= up: 
     cnt+=1 
    else: 
     while num > up: 
      cnts.append(cnt) 
      cnt=0 
      up+=100 
     cnt=1 
cnts.append(cnt) 
for i in range(len(cnts)): 
    print(str(i*100+1) + "-" + str(i*100+100) + " = " + str(cnts[i])) 
+0

謝謝你的幫助! –

+0

對不起再次發生錯誤,但是您是否知道如何編輯上面的代碼以包含0,因此範圍爲0,1-100,101-200等。 –

0

您可以使用整數除法打破數爲範圍,然後用值從整數除法把值放入一個列表,所以:

from collections import defaultdict 

nums = [10, 50, 210, 300, ...] 
bin_sort = defaultdict([]) 

for num in nums: 
    bin_sort[num//100].append(num) 

bin_sort將包含你需要組織到什麼範圍的增加,你的所有值在...上。因此,要獲得0-100斌,你會打印:

>>>print(bin_sort[1]) 
[10, 50, ...] 

這也是值得看的桶排序以這樣的事情(Algorithms for bucket sort

+0

謝謝您的幫助! –

0

另一個可能的迭代求解:

import math 

with open('numbers.txt', 'r') as f: 
    numbers = [int(x) for x in f.readlines()] 
    ranges = math.ceil(max(numbers)/100) 

    for r in range(ranges): 
     bottom = r * 100 
     top = bottom + 101 
     range_count = [num for num in numbers if num in range(bottom, top)] 
     print('Number in Range {}: {}'.format(r, len(range_count))) 
+0

謝謝你的幫助! –

0

這應該適合你,不需要外部庫如collections

ranges = { # (start, end): [count, [number list]] 
(0, 101): [0, []], 
(101, 201): [0, []], 
(201, 301): [0, []] 
} 

with open('numbers.txt', 'r') as f: 
    for line in f.readlines(): 
     numbers = [int(n) for n in line.split()] 
     for num in numbers: 
      for start, end in ranges.keys(): 
       if start <= num < end: 
        ranges[(start, end)][0] += 1 
        ranges[(start, end)][1].append(num) 

for range_ in ranges.keys(): 
    print("{}-{}: {}".format(range_[0], range_[1], ranges[range_][0])) 
+0

謝謝你的幫助! –

相關問題