将列表列表中的特定元素从字符串转换为整数

2024-04-24 12:56:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个结构化的列表列表,其中每个元素都是一个字符串。我想把这个列表中的某些元素(已知索引,总是相同的)转换成整数。我尝试过使用列表理解或isdigit()方法(没有负元素),但无法解决。在

list_of_lists = [['spam','1','toast'], ['bacon','5','eggs'], ['juice', '8', 'tea']]
new_breakfast_list = [[int(element) for element in row] for row in list_of_lists]

上面的代码在尝试转换第一个元素时给出ValueError: invalid literal for int() with base 10: 'spam'。我想忽略错误并向前移动到下一个元素,或者具体地循环类似list_of_lists[i][1]这样我就可以得到:

^{pr2}$

Tags: of字符串in元素列表for整数element
3条回答

只需定义您自己的小助手函数,类似于:

def maybe_int(val):
    try:
        return int(val)
    except ValueError:
        return val

现在你可以用它来理解任何你想要的东西。在使用str.isdigit检查失败的情况下(例如字符串中的空白、负数等),它将继续工作。在

如果数据的结构是可靠的,那么就根本不用为这些东西费心了。做一个简单的列表比较:

^{pr2}$

因为处理的是正整数,所以可以检查字符串中是否只有数字,并转换为不使用三元值。在

list_of_lists = [['spam','1','toast'], ['bacon','5','eggs'], ['juice', '8', 'tea']]
new_breakfast_list = [[int(element) if element.isdigit() else element for element in row] for row in list_of_lists]

产量:

^{pr2}$

但有2个缺点:

  • 它尝试转换所有项目,即使只有第二个项目是整数
  • 它不能处理负片(如果你需要的话)

注意:有一个繁琐的/不太有效的方法来处理一般的正/负/从空格整数开始的情况,只有你必须使用它!否则,带有try/except的wim答案更好

new_breakfast_list = [[int(element) if element.strip().isdigit() or (element.strip()[0]=="-" and element.strip()[1:].isdigit()) else element for element in row] for row in list_of_lists]

您的列表理解几乎是正确的,您只需要检查在内部循环中使用isdigit(),并根据值ifisdigit使用int(element)或仅使用element。在

new_breakfast_list = [[int(element) for element in row if element.isdigit() else element] for row in list_of_lists]

或者,如您所知,整数元素出现在索引1处,您可以使用:

^{pr2}$

正如您知道要更改的索引一样,应该使用此方法,因为它可以避免不必要的遍历每个元素。在

相关问题 更多 >