python list:在保持结构的同时将列表中的每个元素加倍

时间:2016-03-27 00:03:51

标签: python list

如何编写一个函数来加倍列表中的每个元素,同时保持列表的结构?

例如:

0.4.2 version

2 个答案:

答案 0 :(得分:4)

一个简单的方法可能是:

def double(li):
    try:
        return [double(x) for x in li]
    except:  # li is not iterable, recursion base case
        return 2*li  # or sth. else for non-numerical, non-iterable types
然而,请注意,这个解决方案'可以'解决'各种各样的迭代。一个更复杂的版本,维护你的iterables的类型,因此可以处理列表,元组,集等的任何嵌套结构将在try-block中有这一行:

 return type(li)(map(double, li))  # should work in Python 2 and 3

这实例化并返回li原始类型(列表,元组等)的对象,其中包含li中所有加倍元素的列表(Py2)或地图对象(Py3)

答案 1 :(得分:2)

如果您可以保证列表只是列表和数字,您可以这样做:

def double(numberlist):
    return [double(x) if isinstance(x, list) else x * 2 for x in numberlist]

如果参数可以是任何可迭代的,你可以这样做:

from collections import Iterable
def double(numberlist):
    return [double(x) if isinstance(x, Iterable) else x * 2 for x in numberlist]