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))

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/hanmk/p/14206026.html
Copyright © 2011-2022 走看看