最新Python itertools.compress:选择器已经用完,为什么源数据又被取走一项 有一条数据流和一串选择标记,compress可以按标记筛出需要的元素。但选择器只有两项时,数据流结束过滤后却可能已经走过第三项。若后面还要继续消费同一个迭代器,这个差异就会造成一条记录看似凭空消失。过滤结果只描述哪些... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
Python itertools.cycle:源列表已经追加元素,为什么循环里始终没有新成员 把候选列表交给cycle轮流取值,之后往原列表追加一个候选,却怎么也轮不到它。名字里的“循环”容易让人以为每轮都会重新遍历来源;实际在首次输入结束后,cycle会反复返回已经保存的元素,不会为下一圈重新获取整个来源。... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python zip_longest 的补位值:读到 None,怎样分清原值为空还是这一格根本不存在 比较两列记录时,希望较长一侧的尾部也出现在报告里,于是把zip换成zip_longest。结果里出现None,看起来像“没有数据”,但原列表本来就允许None。默认补位把原值为空与该位置不存在表示成同一个对象,报告很... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python combinations 的位置身份:输入只有两种字母,为什么同一对结果会出现两次 从 A、A、B 中取两个元素,combinations 会交出一次 AA 和两次 AB。看到重复 AB 后直接认定库函数没有去重,会漏掉问题本身:两个 A 位于不同位置,可以代表两张独立卡片,也可以代表同一个类别的重... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python islice 的步长:只拿到两项,为什么原迭代器已经向前走了七步 从一条逐项生成的数据流里每隔三项取一次样本,islice 看起来像列表切片。结果列表只有两项,可是随后继续读取原流,却从第八项开始。被跳过的数据已经被读取并丢弃,源迭代器不会为另一个使用者保留这些位置。下面用 see... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python accumulate 初始值:三次变化,为什么返回四个累计结果 做一个库存变化演示,起点是十件,随后依次增加三件、减少两件、增加五件。把 initial 设为十之后,结果列表却比变化次数多一个;再与三个事件名称直接配对,最后一次变化后的库存没有显示。问题不在加法,而是你把“事件序... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python takewhile 的边界元素:前半段读完后,第一条正文为什么不见了 分隔位置已经被读取了一次文本开头是注释,后面才是正文,用 takewhile 取出连续注释很自然。可如果随后继续遍历同一个输入迭代器,正文第一行可能已经丢失。判断一行“不再属于注释”必须先取到这一行;takewhil... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python product 的输入池:只取一个组合,为什么源数据已经全部读完 把读取输入和产生组合分开看组合参数时,itertools.product 很方便:颜色、尺寸与材质各给一组值,就能依次得到所有搭配。由于返回结果是迭代器,很容易以为只调用一次 next,就只会从每个输入取出一项。实际... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python itertools.tee 分流:两个迭代器为什么仍会一起占用内存 一份数据既要生成预览,又要计算汇总,最自然的想法是把迭代器分成两路。调用 tee 后,确实可以分别推进两个结果,但这不意味着复制了两个独立数据源。它们仍从同一个上游取值,只是各自记录阅读位置,暂存尚未被其他分支追上的... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python groupby 分组实战:相邻片段和全局汇总是两种问题 先用一条交错记录确定需求假设流水按到达顺序记录为 A 收到两件、A 收到三件、B 收到七件、A 又收到五件。运营想看每段连续处理量,财务想看每位客户的总量。输入完全相同,答案却不同:前者有三段,后者只有两个客户。选工... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读