查找长列表Python的最小值

时间:2017-07-18 18:21:28

标签: python

我正在使用逗号分隔的列表中的数字。我试图在这个数据中找到多个范围的最小数字。(即找到0-100范围内列出的最小数字)

我的问题是每当我运行以下代码时,我得到一个大约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)) 

3 个答案:

答案 0 :(得分: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的{​​{1}}返回function
  • 的元素序列
  • Truemap(function, iterable)应用于function
  • 的每个元素

请注意,如果您的数据以逗号分隔,则应使用iterable

此外,如果你正在运行Python 3.x,你应该只使用line.split(",")因为它已经返回一个迭代器,这与Python 2版本不同。此代码基于迭代器,它允许您处理大量数据流而无需将其复制到内存中,这使得此函数非常节省内存和速度。

答案 1 :(得分: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]

答案 2 :(得分: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