我想创建一个函数,它在参数中有一个列表和一个阈值。 此函数将返回列表中值大于前一值的阈值或更多值的int索引列表。
到目前为止,我创建了:
def bigger(lst, number):
x = []
for a, prev in zip(lst[1:], number):
diff = a - prev
if diff >= 2:
x.append(a)
print(x)
bigger([0,1,-1,3,7,4,5,3,2,4,8],2)
这将打印出符合以下条件的数字列表,但我想打印索引列表。所以它应该打印出[3,4,9,10](索引),但打印出[3,7,4,8]
答案 0 :(得分:4)
使用zip
和enumerate
,enumerate
将返回索引以及项目:
def solve(lis, num):
for i, (x, y) in enumerate(zip(lis, lis[1:]), 1):
if y - x >= num:
yield i
print list(solve([0,1,-1,3,7,4,5,3,2,4,8], 2))
#[3, 4, 9, 10]
如果你想支持发电机,那么:
from itertools import tee, izip
def solve(lis, num):
it1, it2 = tee(lis, 2)
next(it2) #drop first item
for i, (x, y) in enumerate(izip(it1, it2), 1):
print x, y
if y - x >= num:
yield i
print list(solve((x for x in [0,1,-1,3,7,4,5,3,2,4,8]), 2))
#[3, 4, 9, 10]
答案 1 :(得分:1)
提示,您可以使用list.index(element, [start,[end]])
来实现此目标
@Games Brainiac,这是如何使用list.index()返回元素列表的位置
a = [1,2,3,4,5,5,6,6,7,8]
b = [2,5,6]
def findItem(a,b):
index = []
for item in b:
start = -1
while True:
try:
start = a.index(item, start+1)
index.append(start)
except ValueError:
break;
return index
print findItem(a,b)
在我的情况下,结果是:
[1, 4, 5, 6, 7]
下次,请三思而后行
答案 2 :(得分:0)
def bigger(l, num):
_ret = []
for i, var in enumerate(l[1:], start=1):
if var - l[i - 1] >= num:
_ret.append(i)
return _ret
看看上面的代码,它会按照您的预期执行。工作example。以上,但在列表理解中:
def bigger(l, num):
return [i for i, var in enumerate(l[1:], start=1) if var - l[i - 1] >= num]
您也可以通过以下方式制作发电机:
def bigger(l, num):
for i, var in enumerate(l[1:], start=1):
if var - l[i - 1] >= num:
yield i
工作example。