繁体   English   中英

我怎样才能在 python 中得到一系列的浮点数?

[英]How can i get a range of floats in python?

for i in range(1.5,21):
    print(i)

每当我运行此代码时,我都会收到错误消息:

TypeError: 'float' object cannot be interpreted as an integer

是否有任何内置模块可用于获取一系列浮点数?

假设您知道要将范围1.5, 21划分为多少个值, numpy.linspace将完成这项工作:

import numpy

for i in numpy.linspace(1.5,21,num=10):
    print(i)

output:

$ python main.py
1.5
3.6666666666666665
5.833333333333333
8.0
10.166666666666666
12.333333333333332
14.5
16.666666666666664
18.833333333333332
21.0

或者,如果您宁愿 go 而不是 output 值的数量,您可以使用numpy.arange

import numpy

for i in numpy.arange(1.5,21,step=0.5):
    print(i)

output:

$ python main.py
1.5
2.0
2.5
3.0
[-- cut --]
19.0
19.5
20.0
20.5

您无法获得range float 想想看。 计算机可以完成一项半(1.5)的任务吗? 如果您只是想给它一个浮点数并将其向上(或向下)舍入,然后使用round() function,这会将浮点数舍入为int

我想这对您来说是一个最佳解决方案,但请注意,此代码有时会返回错误的结果! 作为重复元素甚至丢失一些!

def frange(*args):
    
    ((res:=[],gdigits:=lambda n,r:len(str(n)[::-1].split('.')[0])if'.'in str(n)else r,chf:=lambda n:True if type(n)==float else False),
    ((len(args)==0)and(
        a:=0.,
        b:=10.,
        c:=1.)),        
    ((len(args)==1)and((chf(args[0])and(
        a:=0.,
        b:=args[0]*1.,
        c:=1/10**gdigits(args[0],0))
        )or(
        a:=0,
        b:=args[0],
        c:=10**gdigits(args[0],0)))),       
    ((len(args)==2)and((any(map(lambda x: True if int(x)!=x else False,args))and(
        a:=args[0]*1.,
        b:=args[1]*1.,
        c:=1/10**max(gdigits(a,len(str(a))),gdigits(b,len(str(b)))))
        )or(
        a:=args[0],
        b:=args[1],
        c:=1))),
    ((len(args)==3)and((any(map(lambda x: True if int(x)!=x else False,args))and(
        a:=args[0]*1.,
        b:=args[1]*1.,
        c:=args[2]*1. if args[2]!=0 else 1)
        )or(
        a:=args[0],
        b:=args[1],
        c:=args[2] if args[2]!=0 else 1)))
        )   
    res.append(a)
    (a<b and [res.append(a:=round(a+c,len(str(c)[::-1].split('.'))if'.'in str(c)else 0)) for _ in iter(lambda:a<b,0)])
    (b<a and [res.append(a:=round(a-c,len(str(c)[::-1].split('.'))if'.'in str(c)else 0)) for _ in iter(lambda:b<a,0)])      
    return (i for i in res)

print('****    Test Cases    ****\n')
print(f'no args: {list(frange())}\n')
print(f'float arg: {list(frange(0.58))}\n')
print(f'int arg: {list(frange(10))}\n')
print(f'2  float args: {list(frange(1.11,1.3))}\n')
print(f'reversed 2 float args: {list(frange(1.3,1.11))}\n')
print(f'2 int args: {list(frange(3,8))}\n')
print(f'reversed 2 int args: {list(frange(8,3))}\n')
print(f'3 float args: {list(frange(1.75,3.4,0.05))}\n')
print(f'reversed 3 float args: {list(frange(3.4,1.75,0.05))}\n')
print(f'3 int args: {list(frange(2,11,3))}\n')
print(f'reversed 3 int args: {list(frange(11,2,3))}\n')
print(f'mixed 1: {list(frange(3,12.4,0.2))}\n')
print(f'mixet 2: {list(frange(12,1,1.2))}\n')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM