在Python中列表中的列表的类型转换条目

时间:2015-06-14 13:54:59

标签: python list casting

我希望对Python中另一个列表中的列表的每个条目进行类型转换。

我知道map适用于这些类型的案例:

list = map(int, list)

但这并不是这样的工作案例:

for entry in list:
    entry = map(int, entry)

这些条目在循环中是类型转换,但是当循环结束时,不知何故,每个条目都会恢复为原始类型。

说我有这样一个列表:[1, 2, 3, 4]。我可以将每个条目转换为这样的字符串:new_list = map(str, [1, 2, 3, 4])给我['1', '2', '3', '4']。但这不适用于另一个列表中的列表。 [ [1, 2], [3, 4] ]使用相同的方法无法转换为字符串。

5 个答案:

答案 0 :(得分:1)

您需要将map返回的输出转换为python3中的列表。

>>> s = [[1, 2, 3, 4], [1, 2, 3, 4]]
>>> [list(map(str,i)) for i in s]
[['1', '2', '3', '4'], ['1', '2', '3', '4']]

答案 1 :(得分:1)

当您使用for循环时,list中的条目值将复制到变量entry,因此更改条目将不起作用。

上述语句的意思是,假设list是一组内存位置,每个内存位置包含一个pointer对象,在上面的例子中是另一个list。当你这样做 -

for entry in list:

条目将是一个全新的内存地址,它仍然包含与pointer中对象相同的list。但是当你这样做的时候 -

entry = map(int, entry)

您正在更改新内存地址(而不是列表中的内容)以指向其他位置,这不会导致原始列表条目发生更改。

让我们举一个简单的lst数字列表示例,然后我们尝试下面的代码 -

lst = [1,2,3,4]
for n in lst:
    n = 1

最后,如果您打印lst,它仍然是[1,2,3,4]

另外,假设你不能使用下面的内容,因为你有一个列表列表,lst是你的变量 -

lst = list(map(lst))

你应该尝试像 -

这样的东西
for idx, entry in enumerate(list):
    list[idx] = list(map(int, entry))

请注意,您不应该使用list作为变量名称,因为它是lists

的python中的预定义名称

答案 2 :(得分:1)

您的尝试失败,因为您正在更改循环变量的值而不是列表的值。

要解决您的问题,您可以将地图嵌套在另一个地图声明中。

>>> l = [[1, 2], [3, 4]]
>>> map(lambda x: map(str,x),l )
[['1', '2'], ['3', '4']]

然而,在这种情况下,列表理解会更好

>>> [[str(j) for j in i ]for i in l]
[['1', '2'], ['3', '4']]

答案 3 :(得分:1)

看起来你可能得到任何数据格式,有时是单维数组与双维数或甚至更多嵌套列表,无论你得到一个简单的列表还是高度嵌套的列表,你都想转换它们。请尝试以下方法:

def convert_to_str(items):
    return [convert_to_str(s) if isinstance(s, list) else str(s) for s in items ]

它适用于所有这些场景。例如:

print(convert_to_str([1, 2, 3, 4]))
print(convert_to_str([[1,2], [3,4]]))
print(convert_to_str([[1,2, [3, 4, [5, [6, 'String!!']]]], [3,4]]))

会给你以下内容:

['1', '2', '3', '4']
[['1', '2'], ['3', '4']]
[['1', '2', ['3', '4', ['5', ['6', 'String!!']]]], ['3', '4']]

如果您不喜欢使用函数但宁愿使用lambda,那么请尝试使用convert_strings替换:

convert_strings = lambda items: [convert_to_str(s) if isinstance(s, list) else str(s) for s in items ]

答案 4 :(得分:0)

你能做的是:

for entry in list:
    entry[:] = map(int, entry)

或者:

list = map(lambda l: map(int, l), list)

或者:

list = [[int(n) for n in l] for l in list]

至于为什么这些有效,但你的却没有,你应该阅读Python的执行模型: