鱼C论坛

 找回密码
 立即注册
查看: 2154|回复: 1

[已解决]请问这两个执行效率一样吗?

[复制链接]
发表于 2023-5-30 11:53:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. words = ['apple','bat','bar','atom','book']
  2. lis = {}
  3. for i in words:
  4.     lis.setdefault(i[0],[]).append(i)
  5. print(lis)
复制代码
  1. words = ['apple','bat','bar','atom','book']
  2. lis = {}
  3. for i in words8dd:
  4.     if i[0] not in lis:
  5.         lis[i[0]] = [i]
  6.     else:
  7.         lis[i[0]].append(i)
  8. print(lis)
复制代码


第二个容易理解
最佳答案
2023-5-30 11:55:00
这两个代码段的执行效率在大多数情况下应该是非常相似的。它们都是O(n)复杂度,n为输入的单词列表长度。虽然setdefault可能在一些实现中更快一点,但这个差异通常是微不足道的。

第一个代码段使用了Python字典的setdefault方法,这个方法在键不存在于字典时,将添加键并设定为默认值。如果键已存在,则返回这个键对应的值。所以,这个方法可以在一行中完成两件事情:1) 检查键是否存在并设定默认值;2) 将新单词添加到列表中。

第二个代码段首先明确地检查键是否存在于字典中,如果不存在,则创建一个新列表并添加到字典中。然后,如果键已经存在,就直接将新单词添加到列表中。

在实际的Python实现中,这两种方式可能会有微小的性能差异,但通常这种差异并不重要。在选择哪种方法时,通常是基于代码的可读性和清晰性,而不是微小的性能差异。总体来说,第一种方法的代码更简洁,但第二种方法可能对初学者来说更易理解。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-30 11:55:00 | 显示全部楼层    本楼为最佳答案   
这两个代码段的执行效率在大多数情况下应该是非常相似的。它们都是O(n)复杂度,n为输入的单词列表长度。虽然setdefault可能在一些实现中更快一点,但这个差异通常是微不足道的。

第一个代码段使用了Python字典的setdefault方法,这个方法在键不存在于字典时,将添加键并设定为默认值。如果键已存在,则返回这个键对应的值。所以,这个方法可以在一行中完成两件事情:1) 检查键是否存在并设定默认值;2) 将新单词添加到列表中。

第二个代码段首先明确地检查键是否存在于字典中,如果不存在,则创建一个新列表并添加到字典中。然后,如果键已经存在,就直接将新单词添加到列表中。

在实际的Python实现中,这两种方式可能会有微小的性能差异,但通常这种差异并不重要。在选择哪种方法时,通常是基于代码的可读性和清晰性,而不是微小的性能差异。总体来说,第一种方法的代码更简洁,但第二种方法可能对初学者来说更易理解。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 20:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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