如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
发布时间 - 2025-12-31 00:00:00 点击率:次本文介绍如何将模板中以 `- [ ]` 开头的选项列表,自动转换为带小写字母编号(如 `a. selection one`)的格式,适用于生成题干、问卷或文档类输出。
在 Python 中实现字母序号(a, b, c, …)编号,本质是将索引 0, 1, 2, ... 映射为 ASCII 字符 'a', 'b', 'c', ...,可借助 chr(ord('a') + i) 完成。关键在于:安全提取原始文本内容(去除 -[ ] 前缀),并按行枚举、逐行重写。
以下是你原 __str__ 方法中 options 字段的优化方案:
from operator import attrgetter
def __str__(self):
# 按 order 排序选项(保持逻辑不变)
self.options.sort(key=attrgetter('order'))
# 构建带字母编号的选项列表:a. xxx, b. xxx, ...
numbered_options = []
for i, option in enumerate(self.options):
# 使用 chr(97 + i) → 'a', 'b', 'c', ...;97 是 'a' 的 ASCII 码
if i >= 26:
raise ValueError("Too many options: alphabetical numbering supports only a–z (26 items)")
letter = chr(97 + i) # 97 → 'a', 98 → 'b', etc.
numbered_options.append(f"{letter}. {option}")
correct_selection = ", ".join(
str(selection) for selection in self.options if selection.correct
)
return _TEMPLATE.safe_substitute({
'dilemma_ethos': self.text,
'options': "\n".join(numbered_options), # 替换为字母编号版本
'correct_selection': correct_selection,
})✅ 注意事项:
- chr(97 + i) 仅支持最多 26 个选项(a–z)。若需更多(如 aa, ab… 或 1, 2, 3),应改用 string.ascii_lowercase 循环或第三方库(如 more-itertools.chunked 配合自定义编号器)。
- 原始模板中 -[ ] 占 5 个字符(含空格),但本方案直接使用 option 对象的 __str__() 输出,避免硬编码切片(如 line[5:]),更健壮、语义清晰。
- 若 option 对象的 __str__() 返回值含意外换行或缩进,建议统一用 str(option).strip() 防御处理。
? 进阶提示(支持 >26 项):
如需扩展至 27+ 项(如 aa, ab, ac…),可引入如下通用函数:
def alphabetize(items):
from string import ascii_lowercase
result = []
for i, item in enumerate(items):
q, r = divmod(i, 26)
prefix = ascii_lowercase[r]
if q > 0:
prefix = ascii_lowercase[q - 1] + prefix # aa, ab, ..., az, ba...
result.append(f"{prefix}. {str(item).strip()}")
return result但对绝大多数教育/测试场景,a–z 编号已足够——简洁、直观、符合阅读习惯。
# python
# 编码
# app
# ai
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
详解jQuery停止动画——stop()方法的使用
如何获取PHP WAP自助建站系统源码?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel distinct去重查询_Laravel Eloquent去重方法
微信小程序 input输入框控件详解及实例(多种示例)
桂林网站制作公司有哪些,桂林马拉松怎么报名?
轻松掌握MySQL函数中的last_insert_id()
phpredis提高消息队列的实时性方法(推荐)
动图在线制作网站有哪些,滑动动图图集怎么做?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
七夕网站制作视频,七夕大促活动怎么报名?
如何在Tomcat中配置并部署网站项目?
详解Huffman编码算法之Java实现
如何登录建站主机?访问步骤全解析
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
魔毅自助建站系统:模板定制与SEO优化一键生成指南
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
如何用腾讯建站主机快速创建免费网站?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何在宝塔面板中修改默认建站目录?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何快速生成专业多端适配建站电话?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
php 三元运算符实例详细介绍
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在橙子建站上传落地页?操作指南详解
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何快速生成可下载的建站源码工具?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
bootstrap日历插件datetimepicker使用方法
如何在IIS中新建站点并解决端口绑定冲突?
公司门户网站制作流程,华为官网怎么做?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel中的Facade(门面)到底是什么原理
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何自定义建站之星网站的导航菜单样式?
JS碰撞运动实现方法详解
下一篇: 中山网站推广排名,中山信息港登录入口?
下一篇: 中山网站推广排名,中山信息港登录入口?


letter = chr(97 + i) # 97 → 'a', 98 → 'b', etc.
numbered_options.append(f"{letter}. {option}")
correct_selection = ", ".join(
str(selection) for selection in self.options if selection.correct
)
return _TEMPLATE.safe_substitute({
'dilemma_ethos': self.text,
'options': "\n".join(numbered_options), # 替换为字母编号版本
'correct_selection': correct_selection,
})