【发布时间】:2017-04-27 22:21:21
【问题描述】:
我有三个列表:
list1 = [10, 20, 30]
list2 = [22, 19, 32]
list3 = [18, 21, 28]
我想过滤每个列表,以便将一个不在 5 位数以内的数字删除到其他两个列表中的另一个数字。但是,我不希望任何数字被使用两次。这是我的代码:
output1 = []
output2 = []
output3 = []
for i, valuei in enumerate(list1):
for j, valuej in enumerate(list2):
for k, valuek in enumerate(list3):
delta1_2 = list1[i] - list2[j]
delta2_3 = list2[j] - list3[k]
if abs(delta1_2) < 5 and abs(delta2_3) < 5:
output1.append(valuei)
output2.append(valuej)
output3.append(valuek)
k=k+1
break
else:
continue
print(output1, output2, output3)
但是,我的输出如下所示:
[20, 20, 30] [22, 19, 32] [18, 18, 28]
我希望它像这样出来(我希望“20”只使用一次,然后在 list1 中移动到“30”):
[20, 30] [22, 32] [18, 28]
【问题讨论】:
-
我不清楚为什么 19 从第二个列表中删除,而 21 从第三个列表中删除。 19 在 22、18 和 21 的 5 以内;并且 21 在 20、22 和 19 的 5 之内。这不应该意味着从输出中删除的唯一数字是 10?
-
我正在寻找 3 个数字,每个数字都在不同的列表中,彼此相差 5 位以内。我没有将值与同一列表中的其他值进行比较。
-
我不确定在这种情况下您所要求的(不使用任何数字两次)是否可行。如果 10 不在其他两个列表中的任何数字的 5 位范围内,那么这并不能说明 20 是否在其他两个列表中的任何数字的 5 位范围内。因此,除非您知道每个列表内或列表之间的关系,否则最终您必须使用某些数字两次。
-
第一个列表中的 20 个、第二个列表中的 19 个和第三个列表中的 21 个都在 5 个以内,并且来自不同的列表。
标签: python for-loop append break enumerate