Python技术迷

某大厂员工吐槽:带了个新人,简单的需求不爱做,做了就说差不多就行了。复杂点的需求又觉得难,想都不想又把问题带回来了

刚看到个贴子,说某大厂员工吐槽自己带的新人:简单的不做、复杂的不敢做,最后一圈又把问题绕回来了。

Image

我觉得这事吧,新人的状态确实常见,但不能当成理所当然

从我的角度看,简单需求不愿意做,本质是怕麻烦;复杂需求直接退缩,又是怕犯错。这种心态放职场上特别危险,容易陷进“既要不累、又要表现好”的死循环,最后谁都带不动,自己也成长不起来。

换个角度讲,带新人确实辛苦,但新人也要起码表现出“我愿意学、我愿意试”的劲头。职场就像买菜,菜要自己挑,摊主还能帮你洗好不成?说到底还是责任心和主动性的问题。

面试题:有趣的电影

想象你在电影院上班,老板说要在大屏幕上滚动“有趣的电影推荐”,要求是: 1)片子本身的介绍别写“boring”; 2)电影编号是奇数; 3)评分高的排前面。 这就是 LeetCode 上那道“有趣的电影”的本质啦。([PasserR's Blog][1])

虽然原题是用 SQL 写的,但你要我用 Python,那咱就当是在本地用 Python 把一堆电影数据“筛一筛、排一排”。

题目表达成 Python 版是啥意思?

一般会给你一堆电影数据,可以想成是这样的结构(伪数据):

movies = [
    {"id": 1, "movie": "War", "description": "great 3D", "rating": 8.9},
    {"id": 2, "movie": "Science", "description": "boring", "rating": 8.5},
    ...
]

目标就三件事:

  1. 只保留 id 为奇数的电影,也就是 id % 2 == 1。
  2. description 不能是 "boring"。
  3. 最后按 rating 从高到低排序。

你看,其实一点都不“算法竞赛”,就是个很日常的数据处理小需求。

我一般会这么想:

第一步是“过滤”(filter): 从原始列表里把“不合格”的电影丢掉,只留下符合条件的。用 Python 就是遍历一遍,判断两个条件:

id 是奇数  -> movie["id"] % 2 == 1
描述不无聊 -> movie["description"] != "boring"

同时满足才保留。

第二步是“排序”(sort): 过滤完得到一小撮电影,再按 rating 降序排一下。Python 原生的 sorted 就够用了,指定下 key 和 reverse 就行。

总体复杂度也很好算:

  • 过滤那一遍是 O(n)
  • 排序是 O(k log k),k 是过滤后剩下的数量,最多也就是 n。 所以整体就是 O(n log n),对这种小数据量完全够用。

按题意写个函数,大概这样:

from typing import List, Dict, Any

definteresting_movies(movies: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
# 1. 过滤:奇数 id 且描述不是 boring
    filtered = []
for m in movies:
if m.get("id", 0) % 2 == 1and m.get("description") != "boring":
            filtered.append(m)

# 2. 按 rating 降序排序
# 如果有电影缺 rating,就当 0 处理
    result = sorted(filtered, key=lambda x: x.get("rating", 0), reverse=True)
return result


if __name__ == "__main__":
    data = [
        {"id": 1, "movie": "War", "description": "great 3D", "rating": 8.9},
        {"id": 2, "movie": "Science fiction", "description": "boring", "rating": 8.5},
        {"id": 3, "movie": "Irish", "description": "boring", "rating": 6.2},
        {"id": 4, "movie": "Ice song", "description": "Fantacy", "rating": 8.6},
        {"id": 5, "movie": "House card", "description": "Interesting", "rating": 9.1},
    ]

    res = interesting_movies(data)
for r in res:
        print(r)

这段跑出来的顺序就是先 id=5 的电影(评分 9.1),再 id=1(8.9),刚好符合题目要的效果:只要描述不“boring”的奇数 id,并且按评分从高到低。

其实这个题有两个点挺适合作为入门小结的:

  1. 判断奇偶: 无论在 SQL 还是 Python 里,奇偶判断基本都是 % 2,这个思路要形成肌肉记忆。

  2. “在别的语言里做本来属于 SQL 的事”: 很多面试或者业务代码里都会出现“先从 DB 把一坨东西拉出来,再在代码里做过滤和排序”,今天这个例子就是非常浓缩的版本。 你可以把这套套路迁移到别的场景:比如筛选活跃用户、过滤掉被封禁的账号、按积分排序等等,结构都是一样的。

大概就这样,一个看起来很“有趣的电影”题,其实就是一手过滤一手排序的小练习,用 Python 写写挺轻松的。你要是愿意,我还可以再给你写一版对比:同样逻辑分别用 SQL 和 Python 实现,放一起对照着看会更有感觉。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB