相关疑难解决方法(0)

检查对象是否为数字的最pythonic方法是什么?

给定一个任意python对象,确定它是否是数字的最佳方法是什么?这里is定义为acts like a number in certain circumstances.

例如,假设您正在编写矢量类.如果给出另一个向量,您想要找到点积.如果给定标量,则需要缩放整个向量.

检查,如果事情是int,float,long,bool很烦人,不包括可能像数字用户定义的对象.但是,__mul__例如,检查是不够好的,因为我刚才描述的矢量类会定义__mul__,但它不是我想要的那种数字.

python types numbers

104
推荐指数
4
解决办法
3万
查看次数

为什么'decimal.Decimal(1)'不是'numbers.Real'的实例?

我尝试检查一个变量是一个数字的任何类型(的一个实例int,float,Fraction,Decimal,等等).

我提出了这个问题及其答案:如何正确使用python的isinstance()来检查变量是否为数字?

但是,我想排除复杂的数字,如1j.

该类numbers.Real看起来完美,但它返回FalseDecimal数字...

from numbers Real
from decimal import Decimal

print(isinstance(Decimal(1), Real))
# False
Run Code Online (Sandbox Code Playgroud)

相反,它可以正常工作Fraction(1).

文档描述了一些应该与数字一起使用的操作,我在十进制实例上没有任何错误地测试它们.此外,十进制对象不能包含复数.

那么,为什么isinstance(Decimal(1), Real)会回来False呢?

python numbers decimal isinstance

11
推荐指数
1
解决办法
547
查看次数

Python比较忽略nan

虽然nan == nan总是如此False,但在许多情况下,人们希望将它们平等对待,这体现在pandas.DataFrame.equals

相同位置的NaN被认为是相等的。

我当然可以写

def equalp(x, y):
    return (x == y) or (math.isnan(x) and math.isnan(y))
Run Code Online (Sandbox Code Playgroud)

但是,这对于像非容器这样的容器[float("nan")]isnan对非数字容器来说都是失败的(因此复杂度会增加)。

那么,人们如何比较可能包含的复杂Python对象nan呢?

PS。动机:比较大熊猫中的两行时DataFrame,我会将其转换为dicts并逐元素比较dict。

PPS。当我说“ 比较 ”时,我在想diff,不是equalp

python equality nan python-2.7 pandas

7
推荐指数
1
解决办法
4061
查看次数

__add__ 支持添加不同类型?

如果 python 是一种支持重载的静态编程语言,将很容易解决。我正在制作一个名为 Complex 的类,它是复数的表示(我知道 python 有它自己的,但我想自己制作一个),其中 a 是实数, b 是虚数 ( Complex(a, b))。它应该支持将 Complex 实例添加到一起 ( Complex(2, 4) + Complex(4, 5) = Complex(6, 9)),以及添加一个整数 ( Complex(2, 3) + 4 = Complex(6, 3))。但是,由于python的性质...

__add__(self, other):
Run Code Online (Sandbox Code Playgroud)

...我必须选择该类将支持哪个,因为它不会在编译时识别类型,也不支持函数的重载。最好的解决方案是什么?我是否必须编写与other参数数据类型相关的 if 语句?

python overloading add

5
推荐指数
1
解决办法
540
查看次数

Python:如果变量是整数或浮点数,则为真

我正在尝试从书籍作业中编写一个小程序,但是我在检测用户输入是否为int/float(增加到总数)或string(return error)时遇到问题.我尝试在add_to_total变量上使用.isdigit()但是当我键入float时,它会直接跳到else代码块.我试过在网上搜索但找不到明确的答案.这是我的代码:

total = 0
print("Welcome to the receipt program!")

while True:
    add_to_total = raw_input("Enter the value for the seat ['q' to quit]: ")
    if add_to_total == 'q':
        print("*****")
        print "Total: $%s" % total
        break
    if add_to_total.isdigit(): #Don't know how to detect if variable is int or float at the same time.
        add_to_total = float(add_to_total)
        total += add_to_total
    else:
        print "I'm sorry, but '%s' isn't valid. Please try again." % …
Run Code Online (Sandbox Code Playgroud)

python variables methods int integer

1
推荐指数
2
解决办法
1055
查看次数