2017-07-18 103 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