Python中的list / tuple切片语法中是否有某种表达式求值?

时间:2011-11-19 18:44:31

标签: python list expression tuples slice

使用numpy数组,你可以在方括号切片语法中使用某种不等式:

>>>arr = numpy.array([1,2,3])
>>>arr[arr>=2]
array([2, 3])

在常规python数据结构中是否存在某种等效语法?当我尝试时,我预计会出错:

>>>lis = [1,2,3]
>>>lis[lis > 2]
2

但不是某种类型的例外,我得到的返回值为2,这没有多大意义。

P.S。我根本找不到这个语法的文档,所以如果有人能指出我的numpy和常规的python(如果存在的话)会很棒。

2 个答案:

答案 0 :(得分:7)

在Python 2.x lis > 2中返回True。这是因为操作数具有不同的类型,并且没有为这两种类型定义比较运算符,因此它按字母顺序("list" > "int")比较类名。由于True1相同,因此您会在索引1处获得该项目。

在Python 3.x中,这个表达式会给你一个错误(一个不那么令人惊讶的结果)。

TypeError: unorderable types: list() > int()

要做你想做的事,你应该使用列表理解:

[x for x in lis if x > 2]

答案 1 :(得分:1)

使用列表理解:

[a for a in lis if a>=2]