首页 文章

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

提问于
浏览
4

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

3 回答

  • 4
    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 .

  • 0

    使用 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]
    
  • 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]
    

    请下次,请三等投票

相关问题