2

R我可以做到这一点

> a = (10:19)
> a
 [1] 10 11 12 13 14 15 16 17 18 19
> b = c(4,7)
> b
[1] 4 7
>
> a[b]
[1] 13 16
>
> a[-b]
[1] 10 11 12 14 15 17 18 19

我想有一种同样优雅的方式可以对 Python (2.7) 列表执行此操作,但还没有找到。我对那a[-b]一点特别感兴趣。有什么想法吗?

[编辑] a 是 [10,11,12,13,14,15,16,17,18,19],b 是 [4,7](索引到 a)

4

3 回答 3

2

您可以使用列表推导来执行此操作

[n for n, i in enumerate(a) if i not in b]

或使用 numpy:

x = np.arange(10, 20)
y = [2, 7]

x[y]
于 2013-07-31T23:08:18.820 回答
2
 a=numpy.array(range(10,20))
 b = [4,7]
 print a[b]
 print a[~numpy.in1d(a,a[b])]

不是很优雅但是嗯......如果列表中有重复的元素,它也不会工作......因为它查看的是否定步骤中的值而不是索引

于 2013-07-31T23:09:25.513 回答
0

你可能想要numpy:

import numpy as np
a = np.array(range(10,19))
b = [3,6]
a[b]
=> array([13, 16])
a[[_ for _ in range(len(a)) if _ not in b]]
=> array([10, 11, 12, 14, 15, 17, 18])
于 2013-07-31T23:10:26.170 回答