Python 创建一个具有布尔值的列表,这些布尔值表示应用于列表时谓词的结果
我试图找出在Python3中是否有一种通过比较获得逻辑列表的方法。 基本上我想输入的是Python 创建一个具有布尔值的列表,这些布尔值表示应用于列表时谓词的结果,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我试图找出在Python3中是否有一种通过比较获得逻辑列表的方法。 基本上我想输入的是 x = [1, 2, 3, 4, 5, 6, 7, 8, 9] xlist = 4 <= x 是否有任何方法可以简单地做到这一点而不使用列表理解 xlist = [4 <= i for i in x] xList=(4)p>我认为你已经做对了。 我认为你已经做对了。 考虑的一件事是你是否需要中间列表。如果不使用A代替。例如(i)P>一个要考虑的事情是你是否需要中间列表。如果不使用A代替。例如
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
xlist = 4 <= x
是否有任何方法可以简单地做到这一点而不使用列表理解
xlist = [4 <= i for i in x]
<代码> xList=(4)p>我认为你已经做对了。 我认为你已经做对了。 考虑的一件事是你是否需要中间列表。如果不使用A代替。例如<代码>(i)P>一个要考虑的事情是你是否需要中间列表。如果不使用A代替。例如,<>代码>所有(i<P)列表理解确实没有错。这正是列表理解的设计。 如果您使用的是NumPy(或SciPy),那么您要查找的语法实际上是有效的:
from numpy import array
...
x = array([1,2,3,4,5,6,7,8,9])
xlist = 4<=x
从numpy导入数组
...
x=数组([1,2,3,4,5,6,7,8,9])
xlist=4列表理解并没有什么错。这正是列表理解设计的目的
如果您使用的是NumPy(或SciPy),那么您要查找的语法实际上是有效的:
from numpy import array
...
x = array([1,2,3,4,5,6,7,8,9])
xlist = 4<=x
从numpy导入数组
...
x=数组([1,2,3,4,5,6,7,8,9])
xlist=4对于大型列表,这:
>>> (4<=i for i in range(1,10))
<generator object <genexpr> at 0xb75beedc>
>>> list(_)
[False, False, False, True, True, True, True, True, True]
# The list(_) is just to show what is inside the generator...
>(4>>列表()
[假,假,假,真,真,真,真,真,真,真]
#该列表(41;只是显示生成器中的内容。。。
优于:
>>> [4<=i for i in range(1,10)]
[False, False, False, True, True, True, True, True, True]
>>[4对于大型列表,这:
>>> (4<=i for i in range(1,10))
<generator object <genexpr> at 0xb75beedc>
>>> list(_)
[False, False, False, True, True, True, True, True, True]
# The list(_) is just to show what is inside the generator...
>(4>>列表()
[假,假,假,真,真,真,真,真,真,真]
#该列表(41;只是显示生成器中的内容。。。
优于:
>>> [4<=i for i in range(1,10)]
[False, False, False, True, True, True, True, True, True]
>>[4您还可以使用以下功能:
print map(lambda i: 4<=i, xrange(1,10))
打印地图(lambda i:4您还可以使用以下工具:
print map(lambda i: 4<=i, xrange(1,10))
打印地图(lambda i:4地图方法可能更快,但如果你真的想知道,请描述一下
也考虑数组模块。
In [2]: %timeit map(lambda i: 4<=i, xrange(1,100))
100000 loops, best of 3: 15.9 us per loop
In [7]: %timeit list(4<=i for i in range(1,100))
100000 loops, best of 3: 10.3 us per loop
In [8]: %timeit list(4<=i for i in range(1,1000))
10000 loops, best of 3: 80.6 us per loop
In [10]: %timeit map(lambda i: 4<=i, xrange(1,1000))
10000 loops, best of 3: 155 us per loop
在[2]:%timeit map(lambda i:4map方法可能更快,但是,如果你真的想知道,请描述一下它们
也考虑数组模块。
In [2]: %timeit map(lambda i: 4<=i, xrange(1,100))
100000 loops, best of 3: 15.9 us per loop
In [7]: %timeit list(4<=i for i in range(1,100))
100000 loops, best of 3: 10.3 us per loop
In [8]: %timeit list(4<=i for i in range(1,1000))
10000 loops, best of 3: 80.6 us per loop
In [10]: %timeit map(lambda i: 4<=i, xrange(1,1000))
10000 loops, best of 3: 155 us per loop
[2]中的:%timeit映射(lambda i:4为什么你觉得列表理解效率低下?列表总是被排序的吗?如果不是,那么我看不出你可以如何绕过测试列表中的每个值。列表理解是一种有效的方法。为什么你觉得列表理解效率低下?列表总是被排序的吗?如果不是,那么我不知道了解如何绕过测试列表中的每个值。列表理解是一种有效的方法。