Python - 查找 2 个列表的补集
Python - finding complement of 2 lists
我正在寻找一种方法,可以让我在比较 2 个列表时检查缺少哪些元素。很像这个线程,但我想用 NumPy Python.
来写
Complement of Two Lists?
import numpy as np
numbers = np.array([1,2,3,4,5,6,7,8,9])
A = np.array([2,5,6,9])
def listComplementElements(list1, list2):
storeResults = []
for i in list1:
for j in list2:
if i != j:
#write to storeResults if 2 numbers are different
storeResults.append(i)
else:
#if numebrs are equal break out of the loop
break
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
目前输出如下所示:[1, 1, 1, 1, 3, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7 , 7, 8, 8, 8, 8, 9, 9, 9]
我做错了什么?
这将为您提供两个数组的补码:
list(set(numbers) - set(A))
[1, 3, 4, 7, 8]
如果您有想要保留的重复值,可以使用以下方法:
from collections import Counter
c1 = Counter(numbers)
c2 = Counter(A)
diff = c1 - c2
print(list(diff.elements()))
这就是您想要的:
import numpy as np
numbers = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
A = np.array([2, 5, 6, 9])
def listComplementElements(list1, list2):
storeResults = []
for num in list1:
if num not in list2: # this will essentially iterate your list behind the scenes
storeResults.append(num)
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
打印:
[1, 3, 4, 7, 8]
你应该只有一个循环,然后说if not in
来评估与第二个列表的关系。否则你会不必要地循环,就像你看到的那样,它会多次输出结果!此外,使用像 is in
或 not in
这样的运算符可以使您的代码比试图理解许多嵌套循环更具可读性:)
我正在寻找一种方法,可以让我在比较 2 个列表时检查缺少哪些元素。很像这个线程,但我想用 NumPy Python.
来写Complement of Two Lists?
import numpy as np
numbers = np.array([1,2,3,4,5,6,7,8,9])
A = np.array([2,5,6,9])
def listComplementElements(list1, list2):
storeResults = []
for i in list1:
for j in list2:
if i != j:
#write to storeResults if 2 numbers are different
storeResults.append(i)
else:
#if numebrs are equal break out of the loop
break
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
目前输出如下所示:[1, 1, 1, 1, 3, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7 , 7, 8, 8, 8, 8, 9, 9, 9]
我做错了什么?
这将为您提供两个数组的补码:
list(set(numbers) - set(A))
[1, 3, 4, 7, 8]
如果您有想要保留的重复值,可以使用以下方法:
from collections import Counter
c1 = Counter(numbers)
c2 = Counter(A)
diff = c1 - c2
print(list(diff.elements()))
这就是您想要的:
import numpy as np
numbers = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
A = np.array([2, 5, 6, 9])
def listComplementElements(list1, list2):
storeResults = []
for num in list1:
if num not in list2: # this will essentially iterate your list behind the scenes
storeResults.append(num)
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
打印:
[1, 3, 4, 7, 8]
你应该只有一个循环,然后说if not in
来评估与第二个列表的关系。否则你会不必要地循环,就像你看到的那样,它会多次输出结果!此外,使用像 is in
或 not in
这样的运算符可以使您的代码比试图理解许多嵌套循环更具可读性:)