Python字符串.find()函数判断逻辑异常问题求助
问题原因解析
1. str.find()的返回值规则
Python中字符串的find()方法返回逻辑是:
- 找到目标子串时,返回子串第一个字符的索引位置(非负整数,比如0、1、2...)
- 找不到目标子串时,返回**-1**
它不会返回布尔值True或False,这是你逻辑出错的核心。
2. 第一个条件sales为空的原因
你写的判断条件:
if transactions_clean[i].find('$') == True:
在Python中,布尔值True等价于整数1,所以这个条件只有当$恰好出现在字符串的索引1位置时才会成立。而你的数据里带$的字符串,$大概率不在索引1的位置(比如常见的开头位置,索引0),所以条件几乎都不满足,sales自然为空。
3. 第二个条件反而得到所有带$字符串的原因
你修改后的条件:
if transactions_clean[i].find('$') == False:
布尔值False等价于整数0,结合你的数据情况,应该是所有带$的字符串中,$都位于索引0的位置(比如格式为$XX.XX),此时find('$')返回0,和False(数值0)相等,条件成立,这些字符串被添加到sales;而不带$的字符串会返回-1,和0不相等,不会被添加,所以最终sales包含了所有带$的内容。
正确的写法
如果要筛选包含$的字符串,推荐两种更直观的写法:
- 用
in运算符(最简洁):if '$' in transactions_clean[i]: sales.append(transactions_clean[i]) - 用
find()判断是否不等于-1:if transactions_clean[i].find('$') != -1: sales.append(transactions_clean[i])
内容的提问来源于stack exchange,提问作者Ahooey
相关产品推荐
相关产品推荐

