如何在 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 】
相关推荐:
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
如何快速搭建高效服务器建站系统?
如何用VPS主机快速搭建个人网站?
Laravel如何使用.env文件管理环境变量?(最佳实践)
免费视频制作网站,更新又快又好的免费电影网站?
网站建设要注意的标准 促进网站用户好感度!
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Linux安全能力提升路径_长期防护思维说明【指导】
如何快速选择适合个人网站的云服务器配置?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel中的withCount方法怎么高效统计关联模型数量
如何快速搭建个人网站并优化SEO?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何快速搭建高效可靠的建站解决方案?
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Python面向对象测试方法_mock解析【教程】
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
浅述节点的创建及常见功能的实现
Python进程池调度策略_任务分发说明【指导】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何在宝塔面板创建新站点?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
JavaScript如何实现继承_有哪些常用方法
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Python3.6正式版新特性预览
如何在阿里云ECS服务器部署织梦CMS网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
重庆市网站制作公司,重庆招聘网站哪个好?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
香港服务器网站卡顿?如何解决网络延迟与负载问题?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
三星、SK海力士获美批准:可向中国出口芯片制造设备
做企业网站制作流程,企业网站制作基本流程有哪些?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
,怎么在广州志愿者网站注册?
JS中对数组元素进行增删改移的方法总结
在线制作视频的网站有哪些,电脑如何制作视频短片?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel如何实现用户注册和登录?(Auth脚手架指南)
下一篇: 中山网站推广排名,中山信息港登录入口?
下一篇: 中山网站推广排名,中山信息港登录入口?


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,
})