Python:如何筛选列表中字符ASCII值总和处于指定区间的字符串
解决字符串ASCII总和区间筛选问题
我来帮你排查代码里的问题,以及给出修正方案:
首先看你当前代码的两个核心问题:
- 收集的是数值而非原字符串:你的
s_lst最后添加的是ASCII总和i,而不是对应的原字符串,所以输出的是数字列表,不是你想要的州名列表。 - 未处理上下界总和的大小顺序:在你的例子里,
NJ的ASCII总和是ord('n')+ord('j')=110+106=216,SD的总和是ord('s')+ord('d')=115+100=215。这时候你的条件b >= i >= a就变成了215 >= i >=216,没有任何数能满足这个条件,自然得不到期望结果。
修正后的代码方案
我们可以调整思路,同时解决这两个问题:
states = ['OH', 'NJ', 'NY', 'SD', 'NH', 'WI'] lowerbound = 'NJ' upperbound = 'SD' # 定义一个辅助函数,计算字符串的ASCII值总和(统一转小写) def calc_ascii_sum(s): return sum(ord(c.lower()) for c in s) # 计算上下界的总和,并确定实际的区间范围(取最小和最大值) sum_low = calc_ascii_sum(lowerbound) sum_high = calc_ascii_sum(upperbound) min_sum = min(sum_low, sum_high) max_sum = max(sum_low, sum_high) # 筛选符合条件的原字符串 result = [] for state in states: current_sum = calc_ascii_sum(state) if min_sum <= current_sum <= max_sum: result.append(state) print(result) # 输出: ['OH', 'NJ', 'NY', 'SD']
代码解释
- 辅助函数
calc_ascii_sum:用生成器表达式简化ASCII总和的计算,不管字符串长度是多少(这里都是2个字符)都能通用。 - 处理区间范围:通过
min()和max()确保区间的下限小于等于上限,避免上下界输入顺序导致的判断失效。 - 收集原字符串:遍历原列表时,直接将符合条件的州名添加到结果列表,而不是数值。
这样运行后就能得到你期望的输出结果了。
内容的提问来源于stack exchange,提问作者user04012001
相关产品推荐
相关产品推荐

