假设我有一个这样的列表:
li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
如何以 Pythonic 方式对列表中的所有元素应用一个函数(例如 int
)?
示例:
>>> func_on_all(li, int)
[0, [1, 2], [3, [4, 5], 6, [7], 8], 9]
最佳答案
你可以使用这个函数:
def to_int(lst):
for i in lst:
if isinstance(i, list):
yield list(to_int(i))
else:
yield int(i)
这是一个测试运行:
>>> li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
>>> list(to_int(li))
[0, [1, 2], [3, [4, 5], 6, [7], 8], 9]
请注意,这仅适用于嵌套列表,并且只能执行 int
功能。我们可以像这样使函数更通用:
def deep_map(lst, f=int): # the parameter `f` is the function
for i in lst:
if isinstance(i, collections.Iterable) and not isinstance(i, str):
yield list(deep_map(i, f))
else:
yield f(i)
这将允许我们使用列表以外的嵌套集合(例如元组),并且我们可以指定我们自己的函数来调用列表。
关于python - 对多级列表中的每一项执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807855/