学Python到底能干什么?看这里就知道

学Python到底能干什么?看这里就知道 | Python是一种代表简单主义思想的语言,极其容易上手,并且功能非常强大,这也是我的第二计算机语言。

个人可以使用Python去做哪些事呢?

✅办公自动化场景:
每天要处理非常多的文档数据,并且有大量的重复性工作的,比如Word,Excel,PPT,PDF等,这些都可以使用Python来实现自动化处理。原本几天的工作量,写一个程序,几分钟、甚至几秒就能搞定,想想都觉得很舒服,再也不用熬夜加班做数据了,因为做的这个工具,还拿过公司的发的突出贡献奖呢。

✅数据自动化采集场景:
遇到资料非常好的网站,想要把里面好的内容保存下来,或者需要限时会员才能下载的内容,我们手动保存肯定需要花费大量的时间,使用Python我们可以在会员结束之前,一次性下载所有会员才能下载的内容,保存都本地以后慢慢看。

✅网站开发场景:
你想开发一个属于自己的小网站,使用Python来构建会非常快,代码会非常少,因为Python有非常好的web框架库Diango和Flask,非常容易的就可以制作一个网站。我平时写一些小工具为了方便给别人使用,除了打包成可执行程序发给别人外,就是做一个这样的小工具网站了,用户直接可以访问网页实现自己想要的功能。

✅数据分析场景:
这块我自己涉及的不多,但是这块也很有用,当你在处理了很多数据后,要直观的展示出来做数据分析,就可以借助Python这个工具啦,可以使用NumPy、Pandas、Matplotlib、SciPy等做数据处理和分析,并且将数据以图表的方式直观的展示出来。

其他的还有很多,看个人的需求了:
比如:Python游戏开发、人工智能和机器学习,物联网等。

Tiobe-index数据: 2024年1月份 Python依然开发者使用第一语言。

以上就是今天分享的个人如何使用Python的内容,欢迎点赞收藏关注,我会持续分享有用的技术干货给大家。

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓

<think>嗯,用户问的是LeetCode第四题的Python解题思路。第四题是寻找两个有序数组的中位数,对吧?这题在困难级别里挺有名的,我记得之前做过。首先,我得确认用户的需求,他们可能是在准备面试,或者在学习算法,需要详细的理解这道题的解法。 首先,题目要求在两个有序数组中找到中位数,并且时间复杂度要是O(log(min(m,n)))。这样的话,暴力解法肯定不行,直接合并数组再找中位数的话,时间复杂度是O(m+n),不符合要求。所以必须得用二分查找的方法。 那正确的思路应该是怎样的呢?我记得这道题需要将两个数组分成左右两部分,使得左边的所有元素都小于右边的元素。并且要确保左右两边的元素数量相等或者左边多一个(当总长度为奇数时)。这时候,中位数就可以根据左边最大值和右边最小值来得到。 接下来,我需要回忆如何实现这个划分。假设数组A和B,A的长度较短,这样可以在A中进行二分查找。确定分割线i和j的位置,使得i + j等于(m + n +1)//2。然后检查A[i-1] <= B[j]和B[j-1] <= A[i]。如果条件满足,说明分割正确,可以计算中位数。否则,调整i的位置,继续二分查找。 然后要考虑边界情况,比如当i=0或者i=m时,左边的最大值可能在另一个数组里。同样的,当j=0或j=n时,也需要处理这些情况。这部分容易出错,需要特别注意。 接下来,我得思考如何将这些步骤转化为Python代码。首先确定较短的数组作为A,这样可以减少二分查找的次数。然后初始化low和high指针,进行二分查找。在每次循环中,计算i和j,然后根据条件调整low或high。 举个例子,比如数组A是[1,3],数组B是[2]。这时候总长度是3,中位数是2。分割线i在A的位置是1,j在B的位置是0。检查A[0] <= B[0]和B[-1](即不存在)<= A[1],满足条件。左边最大值是A[0]=1和B[j-1]不存在,所以左边最大是A[0]=1?不对,可能我哪里搞错了。这时候可能需要重新检查例子。 哦,可能我的例子选得不对。比如A是[1,3],B是[2]。总长度是3,中位数应该在位置2(0-based的话是索引1)。这时候分割线i在A中的位置可能是1,j=0。左边有A[0], A[1]吗?或者分割线i表示左边有i个元素,所以i=1的话,左边是A[0],右边是A[1]。j=0的话,左边是B没有元素,右边是B[0]。这时候左边总共有1+0=1个元素,而总长度是3,需要左边有2个元素。所以可能我的例子有问题,或者我的分割线计算错误。 这时候可能需要重新理解分割线i和j的确定。正确的分割应该是i + j = (m + n +1)//2。例如当总长度是3时,(3+1)//2=2,所以i +j=2。如果A的长度是2,那么可能的i范围是0到2。当i=1,j=1。这时候左边是A[0]和B[0],右边是A[1]和B[1...]。但B的长度只有1,所以j=1可能越界。这时候需要处理边界条件。 看来这部分需要更仔细的分析。可能需要用更详细的例子来验证代码的正确性。例如,当其中一个数组的所有元素都在左边或右边的情况。例如,当A的全部元素都在左边,或者B的全部元素都在左边。 此外,代码中的边界条件处理是关键。比如当i=0时,左边的最大值只能是B[j-1],当j=0时,左边最大值是A[i-1]。同样,当i=m时,右边最小值是B[j],当j=n时,右边最小值是A[i]。 在编写代码时,需要处理这些情况,可能用条件判断来处理这些情况,例如使用负无穷或正无穷来比较。 然后,关于时间复杂度的分析,因为每次二分查找将搜索范围减半,所以时间复杂度是O(log(min(m,n))),符合题目要求。 最后,用户可能需要具体的代码示例。根据上述思路,可以写出相应的Python代码,并加上注释解释每一步的作用。同时,要测试代码的正确性,比如用LeetCode的测试用例来验证。 可能用户还希望了解如何优化或者不同的解法,比如有没有更简洁的方法,或者分治法的应用。但根据题目要求,这里需要给出符合时间复杂度的最优解法,也就是二分查找的方法。 总结一下,解题步骤应该是: 1. 确定较短的数组为A,较长的为B,以减少二分次数。 2. 初始化二分查找的low和high为0和m(A的长度)。 3. 在循环中计算i和j,检查分割条件。 4. 根据条件调整low或high,直到找到正确的分割线。 5. 计算中位数,处理奇偶情况。 在实现过程中,要特别注意边界条件的处理,以确保所有情况都能正确覆盖。</think>### LeetCode 4. 寻找两个有序数组的中位数(Python解题思路) #### 问题分析 给定两个有序数组 $nums1$ 和 $nums2$,要求找到合并后的中位数,且时间复杂度为 $O(\log(\min(m,n)))$[^1]。 #### 核心思路:二分查找法 通过分割数组为左右两部分,使得: 1. 左半部分元素数量等于右半部分(或左半部分多1个,当总长度为奇数时) 2. 左半部分所有元素 $\leq$ 右半部分所有元素 具体步骤: 1. **确保 $nums1$ 是较短的数组**(减少二分次数) 2. **定义分割线**: - 在 $nums1$ 中选位置 $i$,$nums2$ 中选位置 $j$,满足 $i + j = (m + n + 1) // 2$ - 分割后左边元素为 $nums1[0..i-1]$ 和 $nums2[0..j-1]$,右边为 $nums1[i..m-1]$ 和 $nums2[j..n-1]$ 3. **调整分割线**: - 若 $nums1[i-1] > nums2[j]$,说明 $i$ 偏大,需向左调整 - 若 $nums2[j-1] > nums1[i]$,说明 $i$ 偏小,需向右调整 4. **计算中位数**: - 若总长度奇数,中位数为左半部分的最大值 - 若总长度偶数,中位数为 $(左半部分最大值 + 右半部分最小值)/2$ #### 边界条件处理 - 当 $i=0$ 时,左半部分最大值来自 $nums2[j-1]$ - 当 $i=m$ 时,右半部分最小值来自 $nums2[j]$ - 类似处理 $j=0$ 和 $j=n$ 的情况 #### Python代码实现 ```python def findMedianSortedArrays(nums1, nums2): # 确保 nums1 是较短的数组 if len(nums1) > len(nums2): nums1, nums2 = nums2, nums1 m, n = len(nums1), len(nums2) low, high = 0, m while low <= high: i = (low + high) // 2 j = (m + n + 1) // 2 - i # 处理边界条件 max_left_A = -float('inf') if i == 0 else nums1[i-1] min_right_A = float('inf') if i == m else nums1[i] max_left_B = -float('inf') if j == 0 else nums2[j-1] min_right_B = float('inf') if j == n else nums2[j] if max_left_A <= min_right_B and max_left_B <= min_right_A: # 找到正确分割线 if (m + n) % 2 == 1: return max(max_left_A, max_left_B) else: return (max(max_left_A, max_left_B) + min(min_right_A, min_right_B)) / 2 elif max_left_A > min_right_B: high = i - 1 # 减小i else: low = i + 1 # 增大i return 0.0 # 不会执行到此处 ``` #### 复杂度分析 - **时间复杂度**:$O(\log(\min(m,n)))$,每次二分查找范围减半 - **空间复杂度**:$O(1)$,仅使用常数空间 #### 示例验证 ```python print(findMedianSortedArrays([1,3], [2])) # 输出 2.0 print(findMedianSortedArrays([1,2], [3,4])) # 输出 2.5 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值