选择与另一个列表相交的列表元素的简单方法?(Python)

在 R 中,如果我希望所有元素x都在 中y,我会这样做

x[x %in% y]

在 python 中,我可以使用列表理解:

[i for i in y if i in x]

有没有更干净/更易读的方式?我掌握了 Python 的窍门,但我编写的代码并不像我习惯的那样易读。我尝试的第一件事没有奏效:

x[x in y]

我猜是因为in在 python 中只需要标量。


慕侠2389804
浏览 179回答 3
3回答

森林海

您是对的:默认情况下,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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python