簡體   English   中英

操作 python 中的 n 級深度列表列表中的每個元素

[英]Manipulating every element in an n-level deep list of lists in python

假設我們有一個列表列表:

list_of_lists = [['a','b'],['x','y','z']]

什么可以被認為是為每個元素分配值的有效方法?

new_list_of_lists = assign_value_to_all_elements(list_of_lists,'0') 
print(new_list_of_lists) 
>> [['0','0'],['0','0','0']]

我想到的一種非有效方式是:

def assign_value_to_all_elements(list_of_lists, new_value = '0'):
    for i in range(len(list_of_lists)):
        for j in range(len(list_of_lists[i])):
            list_of_lists[i][j] = new_value
    return list_of_lists

我們甚至不能用 numpy 數組來做到這一點:

import numpy as np
list_of_lists_as_np_array = np.array([['a','b'],['x','y','z']])
list_of_lists_as_np_array[:,:] = '0'
Traceback (most recent call last):
  File "<ipython-input-17-90ee38fde5f2>", line 3, in <module>
    list_of_lists_as_np_array[:,:] = '0'
IndexError: too many indices for array

只有當兩個列表大小相同時,它才有效:

import numpy as np
   ...: list_of_lists_as_np_array = np.array([['a','b'],['x','y']])
   ...: list_of_lists_as_np_array[:,:] = '0'
   ...: list_of_lists_as_np_array
Out[23]: 
array([['0', '0'],
       ['0', '0']], dtype='<U1')

在示例中,我們正在使用列表列表(2 級深)。

但是,這可以概括為...列表列表(n 級深)。

是否有一種通用方法可以分配或操作 n 級深度列表列表中的每個“基本元素”(我的意思是 type(element)?=list )?

我們將在這里使用遞歸,因為我們不想編寫n for 循環並且無論如何都不能這樣做,因為您的列表列表的深度是事先不知道的。

訣竅是如果當前查看的元素是列表,則再次調用 function,如果不是,則將其值替換為value

def assign_value_to_all_elements(nested_list, value):
    for n, element in enumerate(nested_list):
        if type(element) is list:
            assign_value_to_all_elements(element, value) # Same work but on a smaller
                                                         # segment of the initial list!
        else:
            nested_list[n] = value

l = [['a', 'b'], ['x', 'y', 'z'], [[1, 2, 3, [4, 5, 6]]], [[[[[[[[None]]]]]]]]]
assign_value_to_all_elements(l, 0)
print(l)
>>> [[0, 0], [0, 0, 0], [[0, 0, 0, [0, 0, 0]]], [[[[[[[[0]]]]]]]]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM