相关疑难解决方法(0)

Python 2如何比较字符串和int?为什么列表比较大于数字,而元组大于列表?

以下代码段使用输出进行注释(如ideone.com上所示):

print "100" < "2"      # True
print "5" > "9"        # False

print "100" < 2        # False
print 100 < "2"        # True

print 5 > "9"          # False
print "5" > 9          # True

print [] > float('inf') # True
print () > []          # True
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么输出是这样的?


实施细节

  • 这种行为是由语言规范强制执行的,还是由实现者决定的?
  • 任何主要的Python实现之间是否存在差异?
  • Python语言版本之间是否存在差异?

python comparison types python-2.x

172
推荐指数
2
解决办法
8万
查看次数

Python中x [x <2] = 0的含义是什么?

我遇到了一些代码类似的代码

x[x<2]=0
Run Code Online (Sandbox Code Playgroud)

玩弄各种变化,我仍然坚持这种语法的作用.

例子:

>>> x = [1,2,3,4,5]
>>> x[x<2]
1
>>> x[x<3]
1
>>> x[x>2]
2
>>> x[x<2]=0
>>> x
[0, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

python numpy python-2.7

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

为什么4 <3'在Python 2中返回True?

为什么在Python 2 中4 < '3'返回True

是因为当我在一个数字周围放置单引号时,Python认为它是一个字符串,字符串比数字大吗?

python comparison operators python-2.x

23
推荐指数
2
解决办法
3155
查看次数

Python比较运算符<和>如何使用函数名作为操作数?

抛出这个问题(在Python 2.7.5中)有一点错字:

def foo(): return 3
if foo > 8:
    launch_the_nukes()
Run Code Online (Sandbox Code Playgroud)

当它,我不小心爆炸了月亮.

我的理解是,E > F相当于(E).__gt__(F)和表现良好的类(如内置)相当于(F).__lt__(E).

如果没有__lt____gt__运营商那么我认为Python使用__cmp__.

但是,这些方法都与工作function对象,而<>运营商的工作.引擎盖下发生了什么?

>>> foo > 9e9
True
>>> (foo).__gt__(9e9)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '__gt__'
>>> (9e9).__lt__(foo)
NotImplemented
Run Code Online (Sandbox Code Playgroud)

python

16
推荐指数
1
解决办法
741
查看次数

为什么Python 2允许列表和数字之间的比较?

我最近在我的程序中发现了一个拼写错误

while len(first_list) > second_list:
    do_stuff
Run Code Online (Sandbox Code Playgroud)

我打得四处这一点,并发现5 < ["apple"] == True5 > ["apple"] == False

为什么Python允许这些类型的比较?什么是在引擎盖下评估,以确定5是否小于["apple"]

python python-2.7

9
推荐指数
1
解决办法
224
查看次数

为什么Python中的Decimal('0')> 9999.0为True?

这在某种程度上与我的问题有关为什么在Python中''> 0 True?

在Python 2.6.4中:

>> Decimal('0') > 9999.0
True
Run Code Online (Sandbox Code Playgroud)

从我对原始问题的回答中我了解到,在Python 2.x中比较不同类型的对象时,类型按其名称排序.但在这种情况下:

>> type(Decimal('0')).__name__ > type(9999.0).__name__
False
Run Code Online (Sandbox Code Playgroud)

那为什么Decimal('0') > 9999.0 == True呢?

更新:我通常在Ubuntu上工作(Linux 2.6.31-20-generic#57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 GNU/Linux,Python 2.6.4(r264:75706,2009年12月7日,18 :45:15)[关于linux2的[GCC 4.4.1]).在Windows上(winX上的WinXP Professional SP3,Python 2.6.4(r264:75706,2009年11月3日,13:23:17)[MSC v.1500 32位(英特尔)]我的原始语句的工作方式不同:

>> Decimal('0') > 9999.0
False
Run Code Online (Sandbox Code Playgroud)

我现在更加困惑.% - (

python comparison logic types operators

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

为什么不同类型的Python对象按类型名称排序?

来自Python文档:http://docs.python.org/library/stdtypes.html#comparisons

实施说明:除数字外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.

有没有理由选择这样做而不是提出例外?

python

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

Python中的奇怪事件

出于某种原因,在Python 2.7的形式表达tuple > list的回报True,但tuple < listtuple == list回报False.这是为什么?

无论如何,这种观察对我来说并不是原创.

python

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

标签 统计

python ×8

comparison ×3

operators ×2

python-2.7 ×2

python-2.x ×2

types ×2

logic ×1

numpy ×1