遍歷多維列表中指定的數的索引

2021-08-14 04:17:35 字數 2600 閱讀 7513

當時寫的時候,發現網上沒有類似的,知乎上有人問,卻沒有答案。那就自己動手吧

這種情況是3維的,但是有沒有可能實現多維?

def

find_where

(list_3, target):

for t in range(len(list_3)):

for tr in range(len(list_3[t])):

for td in range(len(list_3[t][tr])):

if list_3[t][tr][td] == target:

print(t, tr, td)

list_3 = [[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[34,56,7],[4,6,8]],[[1,8,89]]]

target = 8

find_where(list_3, target)

重新看了一下**,發現問題還是挺多,這裡修改後的方法:

list_3 = [[[1,2,3],[4,5,6],[7,8,9],[10,11,8,12]],[[34,56,7],[4,6,8]],[[1,8,89]],[8,8,[8,1,[8,[98,8]]]]]

target = 8

def find_all(mylist,target,returnlist=):#只需要傳入陣列,目標,返回列表

if isinstance(mylist,list):

for key1,value1 in enumerate(mylist):

if isinstance(value1,list):

find_all(value1,target,returnlist)

elif isinstance(value1,int) and target == value1:

print returnlist

returnlist.pop()

elif isinstance(value1,int) and target != value1:

returnlist.pop()

#if len(returnlist)%size != 0

and len(returnlist) > size:

# returnlist = returnlist[:len(returnlist)-len(returnlist)%size]

if len(returnlist)!= 0:

returnlist.pop()

else:

return

''return returnlist

find_all(list_3,target,)

這種情況實現了多維。用的是遞迴。每次都加入key,最後pop,但是回頭看發現出了一點問題

下面是錯誤**解剖

list_3 = [[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[34,56,7],[4,6,8]],[[1,8,89]]]

target = 8

deffind_all

(mylist,target,returnlist=,size=3):

""" mylist是傳入的列表,target是要找的目標值,size是列表的深度

"""if isinstance(mylist,list):# 不管是不是,都新增索引到list中

for key1,value1 in enumerate(mylist):

if isinstance(value1,list): # 如果value還是,就直接遞迴呼叫。

find_all(value1,target,returnlist)

elif isinstance(value1,int) and target == value1: # 如果是int,就判斷值是不是目標值

print returnlist # 如果是就列印一下

returnlist.pop()# 同時把當前的索引彈出

elif isinstance(value1,int) and target != value1: #如果不是,就彈出當前索引

returnlist.pop()

if len(returnlist)%size != 0

and len(returnlist) > size:

# 如果長度不是3的倍數。應該把超出部分截掉 a=[1,2,3,4,5] a[:5-5%3]= a[:3] = [1,2,3]

# 但是這樣做並不能解決問題。。。所以這個判斷應該去掉。

returnlist = returnlist[:len(returnlist)-len(returnlist)%size]

elif len(returnlist)!= 0:

#如果上面的判斷通過,就直接返回了。只要不為0,就彈出一下,因為進入列表之後,會出現少彈出乙個的情況。事實上,這樣做很正確。

returnlist.pop()

else:

# 如果為空,返回空,防止最後出現none情況。具體**見上面

return

''return returnlist

find_all(list_3,target,,3)

有更好的辦法或疑惑可以與我交流。

Python 刪除列表中指定的元素

remove方法用於按值刪除元素,返回值為none pop方法用於按下標刪除元素,返回值為刪除的元素。remove方法用於按值刪除元素,返回值為none pop方法用於按下標刪除元素,返回值為刪除的元素。l c d e f print l 推薦 res l.remove e print l,res ...

django模板獲取list中指定索引的值方式

格式 list.index 示例 補充知識 使用django從後端向前端頁面中傳遞乙個陣列的方法 今天用django框架時遇到乙個坑,就是當前端頁面接收後端傳回來的資料時,該資料是乙個列表形式,列表裡有字串型別的資料,然後就一直報錯。查了老半天才知道是django的自動轉義搞的鬼!那什麼是轉義呢,就...

vue js刪除陣列中指定索引的元素

在前端開發中,我們經常需要對陣列進行操作,增刪改是經常的事情,那我們js中該如何刪除指定的下標元素呢?我們用splice來操作 splice 方法用於新增或刪除陣列中的元素。注意 這種方法會改變原始陣列。陣列中新增新元素 fruits 輸出結果 如果僅刪除乙個元素,則返回乙個元素的陣列。如果未刪除任...