您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 在列表中查找项目和重复项

5b51 2022/1/14 8:22:37 python 字数 1947 阅读 601 来源 www.jb51.cc/python

我正在使用 Python并考虑以下问题:给出一个列表,例如[1,0,-2,0,0,4,5,0,3]多次包含0的整数,我希望有这些0和每一个的索引是它出现在列表中的次数,直到出现不同的元素或列表结束. 给定l = [1,0,-2,0,0,4,5,0],函数将返回((1,1),(3,2),(7,1)).结果是一个元组列表.元组的第一个元素是给定元素的索引(在列表中),第二个元素是在不同元素出现或列表结

概述

给定l = [1,0],函数将返回((1,1),(3,2),(7,1)).结果是一个元组列表.元组的第一个元素是给定元素的索引(在列表中),第二个元素是在不同元素出现或列表结束之前重复的次数.

天真地,我会写这样的东西:

def myfun(l,x):
    if x not in l:
        print("The given element is not in list.")
    else:
        j = 0
        n = len(l)
        r = list()
        while j <= (n-2):
            count = 0
            if l[j] == x:
                while l[j + count] == x and j <= (n-1):
                    count +=1
                r.append((j,count))
                j += count
            else:
                j += 1
        if l[-1] == x:
            r.append((n-1,1))
        return r

但我想知道是否会有更好的(更短的?)方式做同样的事情.

>>> import itertools
>>> l=[1,0]
>>> [(k[0][0],len(k)) for k in [list(j) for i,j in itertools.groupby(enumerate(l),lambda x: x[1]) if i==0]]
[(1,1)]

首先,itertools.groupby(enumerate(l),lambda x:x [1])将按枚举(l)的第二项分组,但保留项的索引.

然后[list(j)for i,lambda x:x [1])if if == 0]将仅保留0值.

最后,需要最后一个列表理解因为list(j)使用了itertools对象.

总结

以上是编程之家为你收集整理的python – 在列表中查找项目和重复项全部内容,希望文章能够帮你解决python – 在列表中查找项目和重复项所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶