You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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']

代码解释

  1. 辅助函数calc_ascii_sum:用生成器表达式简化ASCII总和的计算,不管字符串长度是多少(这里都是2个字符)都能通用。
  2. 处理区间范围:通过min()和max()确保区间的下限小于等于上限,避免上下界输入顺序导致的判断失效。
  3. 收集原字符串:遍历原列表时,直接将符合条件的州名添加到结果列表,而不是数值。

这样运行后就能得到你期望的输出结果了。

内容的提问来源于stack exchange,提问作者user04012001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:12:27