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 数字列表排序,输出对应的索引 | 转载


下一篇:day20 猜字母