zoukankan      html  css  js  c++  java
  • python基础之enumerate() 函数+ Counter类计数器

    enumerate() 函数

    enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据下标和数据,一般与 for 循环一起使用
     
    语法:enumerate(sequence, [start=0])
    • sequence -- 一个序列、迭代器或其他支持迭代对象(字符串、列表、元组、字典)。
    • start -- 下标起始位置。

    例子1

    seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    
    test_1 = enumerate(seasons)
    
    print(type(test_1))

    结果:<class 'enumerate'>
    print(test_1)
    结果:<enumerate object at 0x109ce2ee8>
    print(list(test_1)) # 使用list转为列表形式数据,默认的下标从0开始的
    结果:[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

    seasons = ['Spring', 'Summer', 'Fall', 'Winter']

    test_2 = enumerate(seasons, start=1) # 默认下标从1开始 print(list(test_2)) 结果:[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

    例子2 

    结合for循环使用

    seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    for i, j in enumerate(seasons):
        print(i, j)
        
    结果
    0 Spring
    1 Summer
    2 Fall
    3 Winter    
    
    也就是 i代表下标,j代表元素
    如果使用普通的for循环要达到上面的效果

    seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    for i in range(len(seasons)):
        print(i, seasons[i])
        
    或者
    i = 0
    for j in seasons:
        print(i, j)
        i += 1  

    collections.Counter

    Counter类是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。

    例子

    from collections import Counter
    
    temp = "abccbancaabwn"
    
    test = Counter(temp)
    
    print(test)  # 查看各个元素的出现次数统计
    结果:Counter({'a': 4, 'b': 3, 'c': 3, 'n': 2, 'w': 1})
    
    print(test["a"])   # 查看某个元素的出现次数
    结果:4
    print(test["f"]) # 不存在的元素,出现次数为0 结果:0 # most_common(n)统计出现次数前n位的元素 print(test.most_common(2)) # 返回出现频率前n的数据(例如n=2,返回出现频率排名靠前的2个) 结果:[('a', 4), ('b', 3)]

    enumerate() 函数和collections.Counter结合的实例

    leetcode中题目1:

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1
     
    示例1:
    s = "leetcode"
    返回 0
     
    示例2:
    s = "loveleetcode"
    返回 2
    
    
    import collections
    
    def method(s):
        """
        :param s:
        :return:
        """
        temp = collections.Counter(s)  # 使用Counter类跟踪值出现的次数
        for i, j in enumerate(s):
            # print(i, j)  # 使用enumerate() 函数将数组组合为一个索引序列,i表示下标,j表示数据值
            if temp[j] == 1:  # 如果j元素出现的次数为1,表示这个元素在给出的字符串中只出现了1次
                print("只出现1次的元素为:"+j)
                return i  # 返回这个元素对应的下标
        return -1  # 如果遍历完都没有找到只出现1次的元素,则返回-1

     leetcode中题目2:

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    示例:
    输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
    输出: 2

    链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
    import collections
    
    
    class Solution(object):
        def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            frequency = collections.Counter(nums)  # 统计每个元素出现的次数
            # print(frequency)
            for i in nums:
                # print(frequency[i])
                if frequency[i] > len(nums) / 2:  # 遍历数组,如果这个元素的出现次数超过总长度一半,则返回这个元素
                    return i
    
    
    if __name__ == '__main__':
        test = Solution()
        nums = [1, 2, 3, 2, 2, 2, 5, 4, 2]
        print(test.majorityElement(nums))

  • 相关阅读:
    python字符串方法
    字符串格式化示例
    python中的list()函数和tuple()函数
    python中sort()方法的cmp参数
    条件/三元操作符
    html5 frameset5内嵌框架集
    Sublime Text3取消自动补全结束标签
    Python列表:元素的修改、添加、删除和排序
    SCOI2010 股票交易
    Codeforces 797 D. Broken BST
  • 原文地址:https://www.cnblogs.com/hanmk/p/14206026.html
Copyright © 2011-2022 走看看