在 Python 中将二维列表的一部分转换为 int

Casting part of a 2D list to int in Python

我必须将二维列表的所有字符串元素转换为整数,第一个元素除外。例如,对于列表:

result = [['foo', '2', '21', '48'], ['bar', '18', '180', '54']]

我只想将列表中“数字”的类型更改为 int 类型(例如,第一行中的“2”、“21”、“48”)。

我试过使用列表理解,

result = [int(x) for x in result[i]]
# where i is the traversal variable

但这给出了 invalid literal for int() with base 10: 'foo' 这正是我要避免的。

关于如何在不创建列表的另一个副本的情况下实现此目的的任何想法?我想将更改反映回原始列表。

result = [int(x) for x in result[1:][i]]

试试这个

也许您正在寻找 str.isdigit:

out = [[int(x) if x.isdigit() else x for x in lst] for lst in result]

输出:

[['foo', 2, 21, 48], ['bar', 18, 180, 54]]

您需要使用列表切片来忽略每个列表中的第一个元素。最简洁的方法是使用 map():

result = [['foo', '2', '21', '48'], ['bar', '18', '180', '54']]

for sublist in result:
    sublist[1:] = map(int, sublist[1:])

# Prints [['foo', 2, 21, 48], ['bar', 18, 180, 54]]
print(result)

如果您确信每个子列表中第一个元素之后的所有元素都是数字(或者您想要强制执行该假设,以便在违反时引发异常),您可以根据以下内容进行类型转换索引而不是值,例如:

>>> result = [['foo', '2', '21', '48'], ['bar', '18', '180', '54']]
>>> result = [[int(x) if i else x for i, x in enumerate(row)] for row in result]
>>> result
[['foo', 2, 21, 48], ['bar', 18, 180, 54]]