如何在列表理解中具有多个条件,其中条件在数组中

时间:2018-03-13 01:39:29

标签: python-3.x vector list-comprehension

例如,让A = [3,4]

和Y是多个值的数组,如     Y = [2,3,2,2,2,2,2,3,3,3,3,3] 然后我想选择Y所在的所有标签,其中Y在A中 所以我写了下面的代码:

`Yij = [Y[Y == x] for x in a]`

输出:     [array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]), array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4])] 但这将导致列表清单。 另一方面,我想要一个普通的数组。 关于如何使这项工作的任何建议?

1 个答案:

答案 0 :(得分:3)

列表理解解决方案:

>>> A = set([3, 4])
>>> Y = [2,3,2,2,2,2,2,3,3,3,3,3]
>>> Z = [y for y in Y if y in A]
>>> Z
[3, 3, 3, 3, 3, 3]

以下是显示使用set lookup和list lookup之间性能差异的一些时序:

In [21]: A = set(range(0, 1000, 5))

In [22]: B = list(range(0, 1000, 5))

In [23]: C = list(range(0, 1000))

In [24]: %timeit [y for y in C if y in A]
59.6 µs ± 329 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [25]: %timeit [y for y in C if y in B]
2.94 ms ± 103 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)