我正在使用逗号分隔的列表中的数字。我试图在这个数据中找到多个范围的最小数字。(即找到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))
答案 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
True
将map(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