为何使用join()将字符列表转单个整数时触发ValueError?
字符列表转整数:join()方法触发ValueError的原因及解决办法
我尝试用两种方法把字符列表转成单个整数:
方法一:for循环(正常运行)
>>> a_list = "123456789" >>> a_list = list(a_list) >>> b_int = "" >>> for num in a_list: ... b_int += num ... >>> print(int(b_int)) 123456789
方法二:join()方法(触发报错)
>>> a_list = "123456789" >>> c_int = "" >>> c_int.join(a_list) >>> print(int(c_int)) Traceback (most recent call last): File "xxx.py", line 4, in <module> print(int(c_int)) ^^^^^^^^^^ ValueError: invalid literal for int() with base 10: ''
报错原因
你犯了一个常见的小错误:Python的字符串join()方法不会修改原变量,而是返回一个拼接好的新字符串。你只调用了c_int.join(a_list),但没有把返回的结果重新赋值给c_int,所以c_int始终是初始的空字符串"",把空字符串转成整数自然会触发ValueError。
正确的join()用法
把join的返回值赋值给c_int就行,代码如下:
>>> a_list = "123456789" >>> a_list = list(a_list) >>> c_int = "".join(a_list) >>> print(int(c_int)) 123456789
甚至可以简化,因为原本的a_list是字符串,直接用"".join()也能处理(字符串本身就是可迭代的字符序列):
>>> a_str = "123456789" >>> c_int = "".join(a_str) >>> print(int(c_int)) 123456789
join()确实是更优方案,因为它是Python内置的高效字符串拼接方法,比循环逐个拼接的性能更好,尤其是处理长序列的时候。
内容的提问来源于stack exchange,提问作者Player1
相关产品推荐
相关产品推荐

