如何检查列表中的所有元素是否包含在其他元素中

时间:2016-02-18 05:32:00

标签: python pandas

我有两个列表,需要检查list_1的所有元素是否都包含在list_2 id中,将这些元素保存在新列表中。

我是这样的:

list_1 = ['item','item','item']
list_2 = ['item_2','item_2','item_2']
list_3 = []

for i in range(len(list_1)):
    flag = True
    aux = list_1[i]
    for j in range(len(list_2)):
        if aux == list_2[j]:
            flag == False
            break
    if flag:
        list_3.append(aux)

但这很慢,有办法提高速度吗?

也许是一些建成的熊猫功能?

编辑。

我不需要pandas,但列表实际上是两个数据框的列,我只是用list列出它,因为它是一个更普遍的情况。

4 个答案:

答案 0 :(得分:1)

IIUC我认为您可以使用isin的{​​{1}}和all方法:

pd.Series

答案 1 :(得分:1)

您似乎对sets的结合和差异感兴趣。

您可以检查这些内容,如下所示:

a = set([1, 5, 6, 0])
b = set([0, 8, 2, 3, -5])
a.difference(b)   # returns: {1, 5, 6}
a.intersection(b) # returns {0}
b.difference(a)   # returns: {-5, 2, 3, 8}

答案 2 :(得分:1)

如果您要查找list_1中不在list_2中的元素并将其保存在其他列表中,在本例中为list_3,则可以使用list comprehension }

>>> list_3 = [i for i in list_1 if i not in list_2]

答案 3 :(得分:1)

我觉得numba对于循环来说很有趣,它确实以最小的努力提高了速度:

from numba import jit
@jit
def jitstack():
    list_1 = ['item','item','item']
    list_2 = ['item_2','item_2','item_2']
    list_3 = []
    for i in range(len(list_1)):
        flag = True
        aux = list_1[i]
        for j in range(len(list_2)):
            if aux == list_2[j]:
                flag == False
                break
        if flag:
            list_3.append(aux)

在iPython笔记本中计时:https://drive.google.com/file/d/0B0KNIF4xMP3UNW93LWlmWUFqbnc/view?usp=sharing

原始:每循环3.72μs

Numba:每循环22.4 ns

并且如果我不在list_2中,list_3 = [i为list_1中的i]:每个循环1.22μs