Python改变整个列表的类型?

bio*_*ios 13 python list

我想做这样的事情

def foo(x,dtype=long):
   return magic_function_changing_listtype_to_dtype(x)
Run Code Online (Sandbox Code Playgroud)

即一个完整的列表到一个完整的int列表

任何简单的方法来嵌套列表,即更改类型[['1'],['2']] - > int

Dan*_* D. 34

Python 2:

map(int, ['1','2','3']) # => [1,2,3]
Run Code Online (Sandbox Code Playgroud)

...

def foo(l, dtype=long):
    return map(dtype, l)
Run Code Online (Sandbox Code Playgroud)

在Python 3中,map()返回一个map对象,因此你需要将它转换为一个列表:

list(map(int, ['1','2','3'])) # => [1,2,3]
Run Code Online (Sandbox Code Playgroud)

...

def foo(l, dtype=long):
    return list(map(dtype, l))
Run Code Online (Sandbox Code Playgroud)

  • 为此,它将是“map(lambda sl: map(int, sl), [['1'],['2']]) => [[1], [2]]”。 (2认同)

And*_*ark 8

这是一个非常简单的递归函数,用于转换任何深度的嵌套列表:

def nested_change(item, func):
    if isinstance(item, list):
        return [nested_change(x, func) for x in item]
    return func(item)

>>> nested_change([['1'], ['2']], int)
[[1], [2]]
>>> nested_change([['1'], ['2', ['3', '4']]], int)
[[1], [2, [3, 4]]]
Run Code Online (Sandbox Code Playgroud)


Ste*_*ski 7

列表理解应该这样做:

a = ['1','2','3']
print [int(s) for s in a]   # [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

嵌套:

a = [['1', '2'],['3','4','5']]
print [[int(s) for s in sublist] for sublist in a]   # [[1, 2], [3, 4, 5]]
Run Code Online (Sandbox Code Playgroud)

  • @bios 是的,你可以。只需用一个变量替换 int - 该变量就是您想要的类型。 (2认同)