Mik*_*son 3 python loops for-loop list absolute-value
我试图创建一个整数列表,然后扫描它,以找到列表元素的减法的最小绝对值.我已经创建了列表,但是代码中存在找到最小绝对值的问题,因为它显示的结果不正确.我认为这可能是在循环期间列表元素的可能性.你能帮我找到吗?
例如,当我创建一个列表时? = [2, 7, 5, 9, 3, 1, 2],结果min应该是0,但它是1.
这是我的代码:
min=1000
for i in range (1, N-1):
for j in range (i+1, N):
if (abs (A [i-1] - A [j-1])<min):
min = abs (A [i-1] - A [j-1])
print ("%d" %min)
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
A = [2, 7, 5, 9, 3, 1, 2]
temp = sorted(A)
min_diff = min([abs(i - j) for i, j in zip(temp [:-1], temp [1:])])
print(min_diff) # -> 0
Run Code Online (Sandbox Code Playgroud)
排序确保(i, j)产生总体最小差异的元素对将是一对连续元素.这使得您必须执行的检查次数远远低于所有可能组合的强力方法.
短路有点聪明:
A = [2, 7, 5, 9, 3, 1, 2]
def find_min_diff(my_list):
if len(set(my_list)) != len(my_list): # See note 1
return 0
else:
temp = sorted(my_list)
my_min = float('inf')
for i, j in zip(temp [:-1], temp [1:]):
diff = abs(i - j)
if diff < my_min:
my_min = diff
return my_min
print(find_min_diff(A)) # -> 0
Run Code Online (Sandbox Code Playgroud)
1:转换为set将删除重复项,因此如果相应的集合的元素少于原始列表,则表示至少有一个重复值.但这必然意味着最小绝对差值为0,我们不必再看了.
我愿意打赌,这是所有返回0的列表的最快方法.