我有两个列表,需要检查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列出它,因为它是一个更普遍的情况。
答案 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