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:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 |
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))