我应该使用列表理解而不是普通的for循环吗?

2024-06-09 14:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

一家企业希望开发一款应用程序,帮助贴纸收藏家跟踪他们所拥有的卡片,贴纸数字以许多贴纸的形式出现,有时收藏家会得到重复的卡片,最重要的是被认为罕见的贴纸

条目

第一行有X个整数表示购买的贴纸,第二行有Y个整数表示稀有贴纸

退出

只有一行包含剩余的棍形数字

解决方案

for-loop方法:

bought_stickers = [int(i) for i in input().split()]
rare_stickers = [int(i) for i in input().split()]

rare_stickers_left = len(rare_stickers)

for i in rare_stickers:
    if i in bought_stickers:
        rare_stickers_left -= 1

print(rare_stickers_left)

列表理解方法:

bought_stickers = [int(i) for i in input().split()]
rare_stickers = [int(i) for i in input().split()]

rare_stickers_left = [i for i in rare_stickers if i not in bought_stickers]
print(len(rare_stickers_left))

我的问题是,从可读性、有效性和所有方面考虑,哪种解决方案是最好的

另外,哪一个更适合编写OLIMPIDS


Tags: 方法inforinputlen数字整数解决方案
3条回答

此处不需要前2for loops

bought_stickers = input().split()
rare_stickers = input().split() 
rare_stickers_left = [int(i) for i in rare_stickers if i not in bought_stickers]
print(len(rare_stickers_left))

名单如下:

  • 更简洁
  • 更“Pythonic”
  • 更高效(避免不必要的变量查找)
  • 更简单,所以出现bug的机会更少
  • 等等

两者都不是:python方法只是简单地计算出现次数,而不是创建大型对象的新列表

rare_stickers_left = sum(i not in bought_stickers for i in rare_stickers)

这只是将所有True结果相加(取为1

另一种可能是制作集合并取集合差异:

rare_stickers_left = len(set(rare_stickers) - set(bought_stickers))

但是,这会产生生成三个集合并在临时集合上调用len的开销

相关问题 更多 >