Python 列表中的递增计数器
我写了一个函数,它将列出一个列表中所有非连续整数及其索引,它可以工作,但我想知道是否有可能将它变成一个线性。我的原始代码如下所示:Python 列表中的递增计数器,python,list-comprehension,Python,List Comprehension,我写了一个函数,它将列出一个列表中所有非连续整数及其索引,它可以工作,但我想知道是否有可能将它变成一个线性。我的原始代码如下所示: 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 r
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_continuence1(arr):
结果=[]
i=1
对于范围(1,len(arr))中的i:
如果arr[i-1]!=arr[i]-1:
append({'i':i,'n':arr[i]})
返回结果
作为列表理解
定义所有非连续2(arr):
如果arr[i-1]!=arr[i]-1,则为范围(1,len(arr))内的i返回[{'i':i,'n':arr[i]}
如果列表中包含一些重复的元素,您的第一个解决方案可能无法按预期工作。至于列表理解,你不可能在外部增加一个变量。@Austin听起来像你没有得到。@superbrain你在这里到底会怎么使用它?@Tomerikoo我不会。但是您可以将arr[i-1]]
替换为arr[(i:=i+1)-2]
@superbrain,在我的代码中将arr[i-1]替换为arr[(i:=i+1)-2]会导致语法错误这些解决方案都不起作用,它们只是返回。对于列表[1,2,3,4,6,7,8,10],这两个gi都给出了相同的结果。返回结果如下:[{'i':0,'n':1},{'i':1,'n':2},{'i':2,'n':3},{'i':3,'n':4},{'i':4,'n':6},{'i':5,'n':7},{'i':6,'n':8},{'i':7,'n':10}]@JanKowalski我误解了你的问题,现在应该没问题了。如果是现在,请说明预期结果。