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

如何循环处理列表:首尾求和并删减元素直至得到两位数结果

问题解决代码及说明

需求回顾

针对字符串"jankometka",需要完成两个核心任务:

  1. 统计字母出现频次得到初始列表[1, 2, 1, 2, 1, 1, 1, 1],然后首尾配对求和,依次得到[2, 3, 2, 3]、[5, 5]
  2. 生成每次移除首尾元素后的列表序列:
    [1, 2, 1, 2, 1, 1, 1, 1]
    [2, 1, 2, 1, 1, 1]
    [1, 2, 1, 1]
    [2, 1]
    

原代码问题分析

  1. 频次统计效率低下:用x.count(c)循环统计,每个字符都要遍历整个字符串,不如直接累加计数高效
  2. 列表操作逻辑错误:pop后直接将原列表添加到empty_list,但列表是引用类型,后续修改会覆盖之前的记录;同时循环条件和索引处理混乱,无法正确生成移除首尾的序列
  3. 未实现首尾配对求和的核心逻辑

正确实现代码

from collections import Counter

# 1. 统计字母出现频次,保证顺序与字符串中字母首次出现顺序一致
x = "jankometka"
freq_counter = Counter(x)
my_list = []
seen_chars = set()
for char in x:
    if char not in seen_chars:
        my_list.append(freq_counter[char])
        seen_chars.add(char)
print("初始频次列表:", my_list)

# 任务1:首尾配对求和迭代
current_sum_list = my_list.copy()
sum_results = []
while len(current_sum_list) > 1:
    new_sum_group = []
    # 首尾配对:第i个元素与倒数第i+1个元素求和
    for i in range(len(current_sum_list) // 2):
        new_sum_group.append(current_sum_list[i] + current_sum_list[-(i+1)])
    sum_results.append(new_sum_group)
    current_sum_list = new_sum_group

print("\n求和迭代结果:")
for res in sum_results:
    print(res)

# 任务2:生成每次移除首尾后的列表序列
current_remove_list = my_list.copy()
remove_sequences = [current_remove_list.copy()]
while len(current_remove_list) > 2:
    # 截取中间部分,等价于移除首尾元素
    current_remove_list = current_remove_list[1:-1]
    remove_sequences.append(current_remove_list.copy())

print("\n移除首尾的列表序列:")
for seq in remove_sequences:
    print(seq)

代码说明

  • 频次统计:用Counter高效统计频次,再按字符串中字母首次出现的顺序提取值,确保得到正确的初始列表[1,2,1,2,1,1,1,1]
  • 首尾配对求和:通过循环迭代,每次取当前列表的第i个和倒数第i+1个元素求和生成新列表,直到列表长度≤1
  • 移除首尾序列:每次通过切片[1:-1]获取去掉首尾后的子列表,复制后存入序列列表,避免引用导致的内容覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:25:23