递增计数器内部列表理解



我写了一个函数,它会列出列表中所有非连续整数及其索引,它很有效,但我想知道是否可以将其变成一个线性。我的原始代码如下:

def all_non_consecutive(arr):
result = []
i = 1
for num in arr[1:]:
if arr[i-1] != num -1:
result.append({'i': arr.index(num), 'n':  num})
i += 1
return result

我正在尝试的是:

def all_non_consecutive(arr):
result = []
i= 1
return [{'i': arr.index(num), 'n':  num} for num in arr[1:] if num - 1 != arr[i-1]]

但是正如你所看到的,没有什么可以增加i,所以代码不起作用。有没有一种方法可以使列表理解在变量之外增加?

您可以在范围(1,len(arr((上迭代,而不是直接在列表上迭代。

def all_non_consecutive1(arr):
result = []
i = 1
for i in range(1, len(arr)):
if arr[i-1] != arr[i] - 1:
result.append({'i': i, 'n':  arr[i]})
return result

如清单理解。

def all_non_consecutive2(arr):
return [{'i': i, 'n':  arr[i]} for i in range(1, len(arr)) if arr[i-1] != arr[i] - 1]

最新更新