hahadaxiao 发表于 2023-5-30 11:53:15

请问这两个执行效率一样吗?

words = ['apple','bat','bar','atom','book']
lis = {}
for i in words:
    lis.setdefault(i,[]).append(i)
print(lis)words = ['apple','bat','bar','atom','book']
lis = {}
for i in words8dd:
    if i not in lis:
      lis] =
    else:
      lis].append(i)
print(lis)

第二个容易理解

isdkz 发表于 2023-5-30 11:55:00

这两个代码段的执行效率在大多数情况下应该是非常相似的。它们都是O(n)复杂度,n为输入的单词列表长度。虽然setdefault可能在一些实现中更快一点,但这个差异通常是微不足道的。

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

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

在实际的Python实现中,这两种方式可能会有微小的性能差异,但通常这种差异并不重要。在选择哪种方法时,通常是基于代码的可读性和清晰性,而不是微小的性能差异。总体来说,第一种方法的代码更简洁,但第二种方法可能对初学者来说更易理解。
页: [1]
查看完整版本: 请问这两个执行效率一样吗?