繁体   English   中英

如何打印具有重复元素的列表中的索引

[英]How to print out the indexes in a list with repetitive elements

我想创建一个函数,它在参数中有一个列表和一个阈值。 此函数将返回列表中值大于前一个值阈值或更多值的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]

使用zipenumerateenumerate将返回索引以及项:

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]

提示,你可以使用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]

请下次,请三等投票

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

看一下上面的代码,它会按照你的期望去做。 工作实例 以上,但在列表理解:

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

工作实例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM