2017-07-18 51 views
-2

我正在用逗號分隔列表中的數字。我試圖找到這個數據中的多個範圍的最小數量(即找到範圍0-100中列出的最小數量)查找最小長列表Python

我的問題是每當我運行下面的代碼,我得到一長串關於4個重複的整數。關於如何獲得一個數字的任何想法? 謝謝!

mylist = [] 
def sort_data(x, y): 
    for line in filename: 
     for number in line.split(): 
      if int(number) > x and int(number) < y: 
       mylist.append(int(number)) 
       print(min(mylist)) 
+1

'打印(分(MYLIST))' –

+0

@MauriceMeyer對不起,我忘了輸入min()到我的函數中。我一直在用你提出的代碼來運行它 - 當我輸入問題時,我錯過了它。謝謝! –

+0

@ H.Minear請根據您的輸入和預期輸出編輯您的代碼。這是一個簡單的問題,可以通過過濾器和分鐘的組合來解決。 –

回答

2

這是您可以使用的:

from itertools import ifilter # only needed in Python 2 

def sort_data(x, y): 
    if x > y: x, y = y, x # x should be less than or equal to y 
    Min = None 
    for line in File: 
     _Min = min(ifilter(lambda num: x < num < y, map(int, line.split(",")))) 
     Min = min(_Min, Min) if Min is not None else _Min 
    return Min 
  • ifilter只是filter(function, iterable)一個迭代版本,它從iterable針對function回報True
  • map(function, iterable)適用構造元素的序列functioniterable的每個元素

請注意,如果您的數據以逗號分隔,則應使用line.split(",")。另外,如果您運行的是Python 3.x,那麼您應該只使用filter,因爲它已經返回一個迭代器,與Python 2版本不同。此代碼基於迭代器,它允許您處理大量數據流而不將其複製到內存中,這使得此功能非常具有內存和速度效率。

+0

@ForceBru感謝您的建議!這很好用! –

+0

@taras,它擁有OP正在搜索的最小值 – ForceBru

+0

@ForceBru,對不起,我錯過了一個for循環。 – taras

1

你可以試試這個:

x = 3 

y = 95 

l = [1, 3, 100, 340, 678, 89, 123, 67] 

new_l = [i for i in l if i in range(x, y)] 

輸出:

[3, 89, 67] 
1

小修改您的代碼應工作

mylist = [] 
def sort_data(x, y): 
    for line in filename: 
     for number in line.split(','):#added comma 
      if int(number) > x and int(number) < y: 
       mylist.append(int(number)) 
    print(min(mylist)) #changed tab level 
+0

另一個改進是使用一組而不是mylist – taras

+0

這是真的,我沒有想到這一點。這應該仍然工作, – Ethan

相關問題