0

我有两个列表已经从低到高排序:

A=['40','60','80']

B=['10','42','100']

我想用 B 中的每个项目减去 A 中的每个项目。然后,如果这些值之间的差异满足条件,特别是如果小于 5,则从输出应该是的每个列表中删除这两个项目:

A=['60','80']
B=['10','100']

**有时列表长度不等,有时每个列表中只有一项

我找到了很多方法来减去列表中的项目,但是我不知道如何检索和删除指定列表中的特定项目,或者他们只从相反列表中的每个对应项目中减去一个项目

使用 lambda:

if list(imap(lambda m, n: mn < 5, A, B)) == True:

使用 imap,sub

list(imap(sub, A, B)):

使用 Numpy

M = np.array([A])

N = np.array([B])

c = abs(M-N)

非常感谢。

4

2 回答 2

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
于 2013-07-14T03:02:07.330 回答
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)]

这具有运行时间 O(n log n),因为您要删除的最大差异是 5(一个常数)。应该比简单的 O(n^2) 快得多

于 2013-07-14T03:47:09.473 回答