保姆级讲解 python之enumerate()方法,包教包会

目录

  • 引入
  • find( )基本用法
  • 进入正题
  • enumerate() 基本用法
  • 使用 enumerate() 遍历列表并打印索引和值
  • 可以使用自定义起始索引
  • 实战演练
  • 总结

  • 引入

    在 Python 中,find() 方法主要用于字符串操作,用于查找子字符串在字符串中的位置。它返回的是子字符串第一次出现的索引位置,如果找不到则返回 -1

    需要注意的是,find() 是字符串的方法,而不是列表或数组的方法
    那数组怎么办?当然是今天要介绍的enumerate()方法了


    帮不了解find()方法的小伙伴们学习一下

    find( )基本用法

    代码如下(示例):

    string = "hello world"
    index = string.find("o")  # 找单个字符
    print(index)  # 输出: 4
    index = string.find("world")  # 找一段子串
    print(index)  # 输出: 6
    

    代码如下(示例):

    text = "Python is awesome!"
    print(text.find("is"))          # 输出: 7
    print(text.find("Python"))      # 输出: 0
    print(text.find("not"))         # 输出: -1
    print(text.find("a", 5, 12))    # 输出: 8
    

    进入正题

    对于列表或数组,没有直接的 find() 方法。
    如果你想要查找列表中某个元素的位置,可以使用以下几种方法:

    1.使用 index() 方法(只返回第一个匹配项的索引):

    list = [1, 2, 3, 2, 4]
    index = list.index(2)  # 返回第一个 2 的索引,即 1
    print(index)
    

    这不行啊 只能找第一个······
    别急,大的要来了

    2.使用列表推导式(可以找到所有匹配项的索引):

    arr = [1, 2, 3, 2, 4]
    index_list = [i for i, x in enumerate(arr) if x == 2]  # 返回 [1, 3]
    print(index_list)
    

    来了,来了,enumerate()
    上面代码如果暂时看不懂没关系,听我娓娓道来

    enumerate(iterable, start=0)

    enumerate() 基本用法

    使用 enumerate() 遍历列表并打印索引和值

    fruits = ['apple', 'banana', 'cherry']
    
    for index, fruit in enumerate(fruits):
        print(f"{index}: {fruit}")
        # 0: apple
        # 1: banana
        # 2: cherry
    

    可以使用自定义起始索引

    fruits = ['apple', 'banana', 'cherry']
    for index, fruit in enumerate(fruits, start=1):
        print(f"{index}: {fruit}")
        # 1: apple
        # 2: banana
        # 3: cherry
    

    enumerate() 是 Python 内置函数,返回一个枚举对象,该对象是一个迭代器,每次迭代产生一个包含索引和对应值的元组 (index, value)。

    当然了enumerate()同样可以应用于字符串

    # 应用于字符串
    s = "Hello World"
    for i, c in enumerate(s):
        print(f"Character at index {i} is '{c}'")
        '''
        Character at index 0 is 'H'
        Character at index 1 is 'e'
        Character at index 2 is 'l'
        Character at index 3 is 'l'
        Character at index 4 is 'o'
        Character at index 5 is ' '
        Character at index 6 is 'W'
        Character at index 7 is 'o'
        Character at index 8 is 'r'
        Character at index 9 is 'l'
        Character at index 10 is 'd'
        '''
    

    好了,实际运用的时候到了

    回到引入的问题上来:
    结合 enumerate() 和列表推导式,查找列表中某元素的下标

    def find_occurrence(list, target):
        index_list = [i for i, x in enumerate(list) if x == target]
        return index_list
    
    
    arr = list(map(int, input().split()))
    target = int(input())
    ans = find_occurrence(arr, target)
    print(" ".join(map(str, ans)))
    
    

    实战演练

    统计长度为3的回文子序列的个数

    (回文序列是指一个字符串,其正读和反读都一样。如“aba”
    对于字符串"aaa",它的子序列有"a1",“a2”,“a3”,“a1a2”,“a1a3”,“a2a3”,“a1a2a3”,“ ” )

    input:
    第一行包含一个整数n代表字符串的长度(1<=n<=1e5)。
    第二场包含一个长度为n的字符串 。

    output:
    输出该字符串长度为3的回文子序列的个数。

    样例输入1
    4
    AAAA
    样例输出:
    4

    样例输入2
    4
    ABAA
    样例输出:
    3

    附上题解code:

    n = int(input())
    s = input().split()
    ans = 0
    for i in range(2, n):
        index_list = [idx for idx, x in enumerate(s[:i]) if x == s[i]]
        for index in index_list:
            ans += i - index - 1
    print(ans)
    

    总结

    enumerate() 是一个非常有用的内置函数,能够简化代码逻辑,特别是在需要同时访问元素及其索引的情况下。
    它不仅限于列表,还可以应用于任何可迭代对象,并且可以通过设置 start 参数来自定义索引的起始值。


    如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
    如果喜欢的话,请给博主点个关注 谢谢

    作者:查理零世

    物联沃分享整理
    物联沃-IOTWORD物联网 » 保姆级讲解 python之enumerate()方法,包教包会

    发表回复