鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[其他] 添加一行代码,提高10000倍以上的执行效率

  [复制链接]
发表于 2024-4-23 22:16:05 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-4-25 16:17:10 | 显示全部楼层
太过厉害,理解不了
timeit模块不是很理解呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 18:38:30 | 显示全部楼层
本帖最后由 ltwox 于 2024-4-25 18:41 编辑

haystack = set(haystack)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 21:23:41 | 显示全部楼层
haystack = set(haystack)?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-26 01:21:49 | 显示全部楼层
haystack = set(haystack)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-26 08:30:33 | 显示全部楼层
想不出来,看看答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-29 20:02:21 | 显示全部楼层
看看 啥玩意
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-5 16:55:34 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-8 14:24:23 | 显示全部楼层
看看,怎么实现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-9 08:42:43 | 显示全部楼层
...0.0...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-9 11:15:02 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-9 14:18:21 | 显示全部楼层
小鱼油想知道怎么做到的qaq
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-9 14:40:18 | 显示全部楼层
查看答案解析
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 02:13:30 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-15 14:13:09 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-23 21:48:32 | 显示全部楼层
haystack = set(haystack)&set(needles)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-30 17:17:21 | 显示全部楼层
当然可以,以下是更通俗的解释:

### 代码作用
这个代码的目的是在一个大列表(`haystack`)中查找多个小列表(`needles`)中的元素,看看有多少个元素是匹配的。

### 代码步骤

1. **生成数据**:
   ```python
   import random
   import timeit
   
   haystack = [random.randint(1, 10000000) for i in range(10000000)]
   needles = [random.randint(1, 1000) for i in range(1000)]
   ```
   这里生成了两个列表:
   - `haystack`:包含了1000万个随机数,每个数在1到1000万之间。
   - `needles`:包含了1000个随机数,每个数在1到1000之间。

2. **将列表转换为集合**:
   ```python
   haystack = set(haystack)
   ```
   这一行把 `haystack` 从列表变成了集合。

3. **查找函数**:
   ```python
   def find():
       found = 0
       for each in needles:
           if each in haystack:
               found += 1
      
       print(f"一共找到{found}个匹配。")
   ```
   - 这个函数会在 `haystack` 中查找 `needles` 中的每一个元素。
   - `found` 是一个计数器,用来记录找到多少个匹配。
   - 如果在 `haystack` 中找到了一个 `needles` 中的元素,就把 `found` 加1。

4. **计时和运行**:
   ```python
   t = timeit.timeit("find()", setup="from __main__ import find", number=1)
   print(f"查找过程一共消耗{t}秒。")
   ```
   这一段代码用来计时,看看查找的过程花了多少时间。

### 为什么转换为集合后效率变快了

- **列表查找**:在列表中查找一个元素时,Python需要从头到尾一个一个地检查,直到找到匹配的元素或是走到列表末尾。这种查找方式的时间复杂度是 \(O(n)\),意思是如果列表有1000万个元素,那么最坏情况下需要检查1000万个元素才能找到一个特定的元素。

- **集合查找**:集合是一种特殊的结构,使用哈希表来存储数据。这意味着每个元素都有一个“地址”或“位置”,所以当你查找某个元素时,Python可以直接跳到那个位置,看看有没有匹配的元素。这种查找方式的时间复杂度是 \(O(1)\),意思是无论集合有多少个元素,查找一个元素的时间都是固定的。

### 总结
将 `haystack` 从列表转换为集合后,查找操作变得非常快,因为集合允许直接访问元素的位置,而不需要一个一个地检查。这个改变让查找过程从一个可能需要很长时间的操作变成了一个几乎瞬间完成的操作,大大提高了效率。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-3 12:44:52 | 显示全部楼层
没想到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-16 18:33:58 | 显示全部楼层
haystack = set(haystack)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-17 19:48:01 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-1 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表