Python3列表中獲取相同元素所有下標或指定第n次出現的下標

前言

  • list: Python3的列表類型, 和其他語言中的數組類似

    定義格式: l = ["a", "b", "c", "a", "b", "c", "a"] , 下文舉例用到的列表x爲此列表

  • list常用方法(文章中用到的方法):

    • index(元素[, Start[, Stop]]) : 獲取列表下標

      三個參數, 後兩個參數爲可選參數.

      一個參數, PS: l.index("a") , 獲取列表中第一個出現的"a"的下標, 此例獲取結果爲0

      兩個參數, PS: l.index("a", 5) , 獲取列表片段中第一個出現的"a"對應的列表的下標, 是指從列表的下標爲5處開始查找, 默認找到列表結尾, 此例獲取結果爲6 , 如果第二個參數爲負數, 則下標位置從後往前數, 從-1開始, 例如最後一個"a"的位置就是-1, 第二個"c"的位置爲-2

      三個參數, PS: l.index("a", 2, 5) , 獲取列表片段中第一個出現的"a"對應的列表的下標, 是指從列表的下標爲2處(包括2)開始查找, 找到列表下標爲5處(不包括5), 此例獲取結果爲3 , 第三個參數爲結束位置, 但不包含此位置

    • count(元素): 獲取元素在列表中的出現次數

      PS: l.count("a") , 此例獲取結果爲3

  • Python內置函數

    • enumerate(iterable[, Start])

      返回一個枚舉對象, iterable必須是一個序列,或iterator,或其他支持迭代的對象. enumerate() 返回的迭代器的__next__() 方法返回一個元組,裏面包含一個計數值(從 start 開始,默認爲 0)和通過迭代 iterable 獲得的值

需求

  • PS: 獲取列表x中第二個"a"出現的位置的下標

代碼實現

  1. 破壞原有結構

    # 定義列表
    l = ["a", "b", "c", "a", "b", "c", "a"]
    # 獲取第一個"a"的下標
    index_one = l.index("a")
    # 刪除第一個出現的"a"元素
    l.pop(index_one)
    # 再次獲取第一個"a"的下標(相當於原列表的第二個"a"), 因爲列表刪除過一個元素, 所以加1
    print(l.index("a") + 1)
    
  2. for循環

    # 定義列表
    l = ["a", "b", "c", "a", "b", "c", "a"]
    # 定義變量, 記錄"a"出現次數
    m = 0
    # 定義變量, 記錄循環到的列表位置, 相當於列表下標
    n = 0
    # 遍歷列表
    for i in l:
        if i == "a":
            n += 1
        if n == 2:    # 當"a"第二次出現時, 打印此時循環到的列表位置(下標)
            print(m)
            break
        m += 1
    
  3. index方法

    # 定義列表
    l = ["a", "b", "c", "a", "b", "c", "a"]
    # 獲取第一個"a"的下標
    index_one = l.index("a")
    # 從第一個"a"的下一個位置開始查找, 所以加1
    print(l.index("a", index_one + 1))
    
  4. enumerate函數枚舉

    # 定義列表
    l = ["a", "b", "c", "a", "b", "c", "a"]
    # 定義通用的獲取某元素在列表中第n次出現的位置下標的函數
    def get_index(l, x, n):
        # 函數作用: 獲取某個元素第n次出現在列表的下標
        # 參數列表: 第一個參數爲可迭代對象, 第二個參數爲要查找的數, 第三個參數爲要查找第幾個出現的x
        l_count = l.count(x)
        result = None
        if n <= l_count:
            num = 0
            for item in enumerate(l):
                if item[1] == x:
                    num += 1
                if num == n:
                    result = item[0]
                    break
        else:
            print("列表裏總共有{}個{}".format(l_count, x))
        return result
    
    # 調用函數, 獲取結果
    result_l = get_index(l, "a", 2)
    print(result_l)
    
  5. 列表推導式

    # 定義列表
    l = ["a", "b", "c", "a", "b", "c", "a"]
    # 定義通用的獲取某元素在列表中第n次出現的位置下標的函數
    def get_index(l, x, n):
        if n <= l.count(x):
            all_index = [key for key, value in enumerate(l) if value == x]
            return all_index[n-1]
        else:
            return None
    # 調用函數, 獲取結果
    result_l = get_index(l, "a", 2)
    print(result_l)
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章