如何将混合列表中的数字字符串转换为 int (Python)

How to convert numerical strings inside a mixed list of list to int (Python)

如何将包含字母和数字字符串的列表列表中的所有数字字符串转换为整数?

我的输出:

[['69', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '420', 'F']]

预期输出:

[[69, ' Test', 'Results'], ['A', 'B', 'C'], ['D', 420, 'F']]

请注意,我的代码读取的是 CSV 文件。谢谢大家

def get_csv_as_table(a, b):
s = False
import csv

with open(a) as csv_file:
    file_reader = csv.reader(csv_file, delimiter=b)
    member = list(file_reader) 

    print(member)

print ("Enter filename: ")
a = input()
print ("Enter the delimiter: ")
b = input()
get_csv_as_table(a, b)

您必须结合 2 个级别的列表理解并使用 str.isdigit()

values = [
    [int(val) if val.isdigit() else val for val in row]
    for row in values
]

尝试使用 2 级列表理解和 int()+.isdigit() 列表理解中的强力组合 ;-)

l=[['69', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '420', 'F']]
l=[[int(y) if y.isdigit() else y for y in x] for x in l]
print(l)

输出:

[[69, ' Test', 'Results'], ['A', 'B', 'C'], ['D', 420, 'F']]

.isdigit() 仅适用于纯整数的字符串表示,如果您也有浮点数,请替换“.”一事无成 ;-)

l=[['69', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '420', 'F']]
l=[[float(y) if y.replace('.','').isdigit() else y for y in x] for x in l]
print(l)

输出:

[[69.0, ' Test', 'Results'], ['A', 'B', 'C'], ['D', 420.0, 'F']]

您可以使用列表理解来实现这一点。唯一的小缺点是您将为此创建一个新列表,而不是修改现有列表。

my_list = [['69', 'Test', 'Results'], ['A', 'B', 'C'], ['D', '420', 'F']]

filtered_list = [
    [int(item) if item.isdigit() else item for item in sub_list]
    for sub_list in my_list
]

如果您想就地编辑列表,您可以使用传统的for循环。以下代码将编辑现有列表而不创建新列表。如果您的列表很大,这可能会很有用。

my_list = [['69', 'Test', 'Results'], ['A', 'B', 'C'], ['D', '420', 'F']]

for i in range(len(my_list)):
    for j in range(len(my_list[i])):
        if my_list[i][j].isdigit():
            my_list[i][j] = int(my_list[i][j])

str.isdigit() 检查给定的字符串是否为数字。要记住的重要注意事项是,它不适用于浮点数,仅适用于整数。一旦条件通过,项目将转换为整数。