基础入门
本讲用列表装下一组收盘价、用字典保存单日行情快照,再把多日记录组织成可继续遍历的小样本,帮助初学者在真正开始循环和收益率计算前,先把价格与日期放进清楚、稳定的数据结构里。
很多人刚开始学 Python 做量化练习时,会下意识把注意力放在“我要赶紧算点什么”上,比如收益率、均线、涨跌幅判断。这个冲动并不奇怪,因为结果看起来更像“真正开始分析”。但如果在此之前,你还没有把手上的价格和日期放进一个稳定、清楚、适合继续操作的数据结构里,那么后面的很多计算都会很快变乱。代码会充满零散变量,样本一多就难以维护,稍微想批量处理就会手忙脚乱。
所以 Python 量化入门的第二讲,最重要的不是再多讲一个公式,而是先解决一个更根本的问题:这些小样本到底应该装在哪里。对入门阶段来说,最值得先掌握的两类容器,就是列表和字典。列表负责把一串有顺序的值稳稳装住,字典负责让一条记录带上清楚的字段名。只要这两类结构先吃透,后面很多看似更复杂的动作,都会建立在一个更清晰的基础上。
换句话说,这一讲并不是在讲孤立语法点,而是在建立一种“先把数据装稳,再谈运算”的编程顺序。这个顺序对后面所有量化小练习都很重要。
初学者最常见的一种写法,是把几天价格分别放在 price1、price2、price3 这样的变量里。刚开始看似简单,因为样本很少,变量也没几个。但这种写法的扩展性极差。只要你想增加到十天、二十天,或者想用循环批量处理,代码就会迅速膨胀。而列表的优势,恰恰在于它天然适合保存一串同类型、带顺序的值。
价格序列尤其适合放进列表里,因为它最重要的信息之一就是先后顺序。你以后无论是取第一天价格、拿相邻两天比较、还是把整串价格交给循环,列表都会显得非常自然。相比之下,一堆散落变量既不利于遍历,也不利于扩展。它们看起来像是在“保存数据”,实际上只是把问题往后推。
所以这一讲里先学会把价格装进列表,本质上是在为后面所有批量操作铺路。你不是只学了一个容器,而是在主动给未来的循环、筛选和函数封装腾出空间。
价格之外,日期是另一个最容易被初学者低估的部分。很多人一开始会把日期当成“备注信息”,觉得先把价格算出来更重要,日期以后再说。但只要你的数据涉及时间顺序,日期就绝不只是附注。它决定了每一个价格对应的是哪一天,也决定了后面计算和输出是否还能被人读懂。
因此,日期也应该像价格一样,先被装进一个清楚的列表里。这样做的好处非常直接。第一,你能更明确地看到日期和价格是否一一对应。第二,后面如果需要一起输出或者一起遍历,就不会临时再回头拼结构。第三,它会让你更早意识到,量化练习里的“数据”往往不是单独一列数值,而是多个相关信息共同组成的一组样本。
对入门阶段来说,这一点非常值得早点建立。因为后面只要一开始写循环、做筛选或做读写,你就会发现:日期和价格从一开始就各自成组,远比后面再救火式地补上要稳得多。
列表非常适合装一串连续价格,但当你需要表达“某一天的这条记录里有哪些字段”时,字典就会更自然。因为字典的核心价值,不在于顺序,而在于它能用清楚的键名把每个值标识出来。对于一条单日行情来说,这种“带字段名”的表达非常重要。你不会只关心一个裸数字,而是希望明确知道:这个值是日期、是收盘价、还是代码。
这也是为什么字典特别适合用来表示单条记录。你只要看到 date、close、code 这些键,就会立刻明白这条记录在表达什么,而不需要靠位置去猜。对初学者来说,这种可读性非常重要。因为代码一旦稍微变长,靠位置记忆会越来越不稳,而带字段名的结构更容易保持清晰。
因此,列表和字典不是二选一的关系。列表更像在解决“这一串值怎么按顺序放”,字典则在解决“这一条记录有哪些字段”。只要这两层区别先弄清楚,后面你搭结构时就不会总在两者之间混淆。
当你已经知道列表适合装多条数据,字典适合表达单条记录时,一个非常自然的组合就出现了:列表里装字典。这个结构在入门量化练习里非常常见,也非常值得早点熟悉。因为它恰好把“多条样本”和“单条记录带字段名”这两种需求合到了一起。
比如,一组多日行情样本,每一天都可以用一个字典来表示,然后把这些字典按顺序放进列表。这样一来,你既保留了时间顺序,又保留了每条记录的字段清晰度。后面你做循环时,可以逐条取出字典;你要读某天收盘价时,也能用键名直接访问。对初学者来说,这是一种非常友好的结构,因为它比更复杂的类或表格对象更轻,又比散落变量清楚很多。
从学习路径看,这种结构也很有承上启下的价值。后面你进一步接触 CSV、pandas 时,会发现这些更高级工具并不是把前面的东西推翻,而是在更大规模上接管了类似的问题。先把“列表里装字典”理解透,后面升级会轻松很多。
一旦你把日期和价格分别放进两个列表,一个非常关键的问题就必须被提上来:它们的长度是否一致。很多人会觉得,这种检查是不是太早、太细了。其实一点也不早。因为只要长度不一致,后面不管你做循环、配对还是输出,都会立刻出问题。更麻烦的是,这种错位有时不会马上报错,却会悄悄让结果失真。
所以在这一讲里,把“日期列表长度应该和价格列表一致”当成一条基本纪律,非常有必要。它会让你从很早开始就形成一种数据对齐意识,而不是等后面循环写乱了、结果看着怪了,才回头追原因。量化练习里很多问题,说到底都和对齐有关。当前先在最小样本层面建立这层意识,后面会省很多时间。
这也是为什么看似简单的容器学习,背后其实已经在悄悄引入数据质量的基本观念。你并不是只会定义列表和字典,而是在开始学习如何让它们承载的样本保持可靠。
很多人学 Python 容器时,容易把列表和字典当成要背的语法点。可对量化入门来说,更重要的是把它们理解成不同场景下的结构选择。你每次拿到一段小数据,都应该开始问自己:我现在更关心顺序,还是更关心字段名?我在处理的是单条记录,还是多条样本?我后面需要遍历,还是需要按键直接取值?
只要这些问题开始在脑子里自然出现,你对列表和字典的使用就会越来越稳。你不再是“因为教程这么写,所以我这么写”,而是能知道为什么此处应该用列表、为什么那里用字典更清楚。这种容器选择意识,会直接影响后面所有代码的清晰度。尤其在量化这种数据驱动场景里,结构一旦选得顺,后面很多计算会自然很多;结构一旦选乱,后面越写越别扭。
所以这一讲更深的一层,其实是在帮你从背语法,过渡到做结构判断。这个转变非常关键。
只要价格和日期已经被装进清楚的容器里,后面的很多步骤就都有了落脚点。循环需要一组可遍历的值,列表正好满足;函数需要一个稳定输入,一组价格列表或一组记录列表都很合适;文件读写时,你也会更容易理解“写出去的其实就是这些结构化样本”。也就是说,这一讲虽然看起来在讲很基础的容器,实际上却给后面整条 Python 入门链路提供了一个共同的输入层。
这也是为什么它值得被单独讲,而不是随手带过。你后面再学 for 循环、收益率函数、CSV 读写、异常处理时,都会隐约回到这里:如果我一开始没有把数据装在合适结构里,后面所有步骤都会变得更笨重。反过来,只要当前这一步走稳,后面很多内容都会显得顺理成章。
因此,这一讲真正的作用,是把数据从“几行零散变量”升级成“后面所有动作都能依托的结构化输入”。
第 2 讲最值得留下的一层判断,是你开始意识到结构先于计算。也就是说,在真正去算收益率、做筛选、写文件之前,先把数据装进合适的结构里,本身就是一种决定后续效率的关键动作。只要这层判断已经建立,你就不会再把容器选择看成无关紧要的准备工作,而会把它视为后面所有操作的起点。
这种判断很重要,因为很多脚本之所以越写越乱,不是后面的逻辑太难,而是一开始的数据结构就没有站稳。第 2 讲先把这层意识立住,后面的学习会明显顺很多。
当价格和日期已经被装进列表、字典或列表套字典以后,更理想的状态不是“我会写这几个语法”,而是你已经感觉到这些结构随时可以被后续步骤直接接住。循环可以遍历它们,函数可以接收它们,文件读写可以序列化它们。第 2 讲其实是在帮助你建立这种可承接意识。只要结构一成形,后续步骤就不该再从零搭输入。
这层意识会直接提升你后面对代码结构的敏感度。你会更快看出某份数据到底是不是已经准备好进入下一步处理。
如果这一讲已经真正站稳,你通常会有一种很明确的完成感:你知道哪些数据适合放进列表,哪些信息更适合放进字典,也知道什么时候该把多条记录组织成“列表里装字典”的形式。更重要的是,你已经能感觉到这些结构不只是语法展示,它们还会让后面的循环、函数和文件读写直接接得上。只要这种承接感已经出现,这一讲就不再只是容器入门,而是真正进入了编程结构思维。
这种完成感很重要,因为它会让你以后更快判断输入层是不是已经准备好。很多后续代码能不能写顺,本质上就取决于这里有没有站稳。
这一讲的重点,不是机械记住列表和字典长什么样,而是先把价格和日期放进适合继续处理的容器里。列表适合承载一串按顺序排列的价格或日期,字典适合表达带字段名的单条记录,而“列表里装字典”则是后面非常常见的多条样本形态。只要你已经开始有意识地区分这些结构的使用场景,这一讲就真正完成了。
本讲是《Python量化入门短课》的第 2 讲,当前主题是《列表和字典:装下价格与日期》。上一讲已经确认了 Python 环境能正常运行,并打印出一组最小收盘价样本。这一讲则把这些零散值真正组织成了可继续处理的数据结构。下一讲会直接在这些结构基础上引入 for 循环,开始批量计算日收益率。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。