问题描述
我写了一个函数,该函数将列出列表中所有不连续的整数及其索引,它可以工作,但是我想知道是否有可能将其变成单线。我的原始代码如下:
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的功能,因此代码无法正常工作。有没有办法使列表理解在变量外部递增?
解决方法
您可以在range(1,len(arr))上进行迭代,而不是直接在列表上进行迭代。
void main() async {
var x = [MyClass(),HisClass(),YourClass()];
var list = x.map(Something
.builder); // Instance of 'Something<MyClass>',Instance of 'Something<HisClass>',Instance of 'Something<YourClass>'
print(list);
}
class Foo {}
class MyClass extends Foo {}
class HisClass extends Foo {}
class YourClass extends Foo {}
class Something<T extends Foo> {
Something();
static Something<Foo> builder(Foo item) {
switch (item.runtimeType) {
case (MyClass):
return Something<MyClass>();
case (HisClass):
return Something<HisClass>();
case (YourClass):
return Something<YourClass>();
}
return Something<Foo>();
}
}
列表理解。
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