我有一个结构化的列表列表,其中每个元素都是一个字符串。我想把这个列表中的某些元素(已知索引,总是相同的)转换成整数。我尝试过使用列表理解或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]
这样我就可以得到:
只需定义您自己的小助手函数,类似于:
现在你可以用它来理解任何你想要的东西。在使用
str.isdigit
检查失败的情况下(例如字符串中的空白、负数等),它将继续工作。在如果数据的结构是可靠的,那么就根本不用为这些东西费心了。做一个简单的列表比较:
^{pr2}$因为处理的是正整数,所以可以检查字符串中是否只有数字,并转换为不使用三元值。在
产量:
^{pr2}$但有2个缺点:
注意:有一个繁琐的/不太有效的方法来处理一般的正/负/从空格整数开始的情况,只有你必须使用它!否则,带有
try/except
的wim答案更好您的列表理解几乎是正确的,您只需要检查在内部循环中使用
isdigit()
,并根据值ifisdigit
使用int(element)
或仅使用element
。在或者,如您所知,整数元素出现在索引
^{pr2}$1
处,您可以使用:正如您知道要更改的索引一样,应该使用此方法,因为它可以避免不必要的遍历每个元素。在
相关问题 更多 >
编程相关推荐