-
森林海
您是对的:默认情况下,Python 操作不是矢量化的。在这方面,R比常规 Python更接近于 3rd 方Pandas的 API 。所以你可以使用 Pandas 系列对象:import pandas as pdx = pd.Series([1, 2, 3, 4])y = pd.Series([2, 4, 6, 8])res = x[x.isin(y)]print(res) # output Pandas series# 1 2# 3 4# dtype: int64print(res.values) # output NumPy array representation# array([2, 4], dtype=int64)Pandas 建立在NumPy 之上,所以你可以在 NumPy 中做同样的事情也就不足为奇了:import numpy as npx = np.array([1, 2, 3, 4])y = np.array([2, 4, 6, 8])res = x[np.isin(x, y)]print(res)# array([2, 4])
-
三国纷争
您可以通过定义自定义getitem () 方法来创建具有您想要的行为的MyList类型from collections import UserList, Iterableclass MyList(UserList): def __getitem__(self, item): if isinstance(item, Iterable): return MyList(x for x in self.data if x in item) return super(MyList, self).__getitem__(item)if __name__ == '__main__': l = MyList([1, 2, 3, 4, 5]) v = l[[2, 3, 11]] print(v) # [2, 3]
-
翻阅古今
这是使用 .isin() 方法的示例,相当于 R 的 %in%。>> x = pd.Series([1,2,3,4,5])>> y = pd.Series([1,3,5,6])>> x[x.isin(y)]0 12 34 5