我有两个已从低到高排序的列表:
A=['40','60','80']
B=['10','42','100']
我想在B中的每个项目中减去A中的每个项目。然后,如果这些值之间的差异满足条件,特别是,如果小于5,则从每个列表中删除两个项目,其中输出应该是:< / p>
A=['60','80']
B=['10','100']
**有时列表的长度不相等,有时每个列表中只有1个项目
我找到了很多方法来减去列表中的项目,但我不知道如何检索和删除指定列表中的特定项目,或者他们只从相反列表中的每个相应项目中减去一个项目
使用lambda:
如果列表(imap(lambda m,n:m-n&lt; 5,A,B))== True:
使用imap,sub
list(imap(sub, A, B)):
使用Numpy
M = np.array([A])
N = np.array([B])
c = abs(M-N)
非常感谢。
答案 0 :(得分:1)
不使用numpy:
A = ["40", "60", "80"]
B = ["10", "42", "100"]
newA = filter(lambda a: all([abs(int(a) - int(b)) >= 5 for b in B]), A)
newB = filter(lambda b: all([abs(int(a) - int(b)) >= 5 for a in A]), B)
print newA
print newB
答案 1 :(得分:0)
A_dict = {}
B_dict = {}
for i in xrange(len(A)):
if A[i] not in A_dict:
A_dict[A[i]] = []
A_dict[A[i]].append(i)
for i in xrange(len(B)):
if B[i] not in B_dict:
B_dict[B[i]] = []
B_dict[B[i]].append(i)
for x in B_dict:
for i in xrange(6):
if x - i in A_dict:
B_dict[x] = []
A_dict[x-i] = []
A_new_idx = []
B_new_idx = []
for x in A_dict:
A_new_idx.extend(A_dict[x])
for x in B_dict:
B_new_idx.extend(B_dict[x])
A_new = [A[i] for i in sorted(A_new_idx)]
B_new = [B[i] for i in sorted(B_new_idx)]
由于要删除的最大差异为5(常量),因此运行时间为O(n log n)。应该比天真的O(n ^ 2)
快得多