使用Python列表推导式判断字符串长度奇偶报错的原因是什么?
问题分析与解决:列表推导式中的TypeError错误
嘿,这个错误我太熟了!咱们来一步步拆解问题出在哪:
错误根源
你写的判断条件x%2==0里,x是myNames列表中的字符串元素(比如'A'、'BB'这类)。在Python中,当你对字符串使用%运算符时,它的作用是字符串格式化,而不是数学里的取模运算。
举个例子,如果你执行'A'%2,Python会认为你想把数字2插入到字符串的占位符中,但你的字符串里根本没有%d这类格式化占位符,自然就会抛出TypeError: not all arguments converted during string formatting这个报错。
修正方案
你真正要判断的是字符串的长度是否为偶数,所以得先通过len(x)获取字符串的长度,再对2进行取模运算。修正后的代码如下:
myNames = ['A','BB','CCC','DDDD'] myList3 = [ 'even' if len(x)%2==0 else 'nope' for x in myNames] print(myList3) # 输出结果:['nope', 'even', 'nope', 'even']
小提示
以后遇到对非数字类型做数学运算的场景,先想想是不是漏了获取它的数值属性(比如长度、转成数字等),别把字符串格式化和数学运算搞混啦~
内容的提问来源于stack exchange,提问作者blockByblock
相关产品推荐
相关产品推荐

