- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近正在解决 codewars 上的一个代码问题,以在列表中查找唯一的数字。我的代码可以工作,但是效率非常低。我不知道为什么会这样。下面是我发布的代码:
我认为问题可能在于我每次迭代时都会复制列表(也许)。
def find_uniq(arr):
equal_check = 0
for i in arr:
arr_new = arr.copy()
arr_new.remove(i)
if i not in arr_new:
equal_check = i
return equal_check
最佳答案
使用collections.Counter ,获取计数为1的:
from collections import Counter
def find_uniq(arr):
c = Counter(arr)
return [number for number,count in c.most_common() if count == 1]
print(find_uniq( [1,2,3,4,2,3,4,5,6,4,5,6,7,8,9])) # [1, 7, 8, 9]
这大约需要 O(2*n),因此 O(n) 因为 2 是常数。
<小时/><强> collection.defaultdict使用 int,获取计数为 1 的:
# defaultdict
from collections import Counter , defaultdict
def find_uniq(arr):
c = defaultdict(int)
for a in arr:
c[a] += 1
return [number for number,count in c.items() if count == 1]
print(find_uniq( [1,2,3,4,2,3,4,5,6,4,5,6,7,8,9])) # [1, 7, 8, 9]
这大约需要 O(2*n),因此 O(n) 因为 2 是常数 - 由于实现内部的 C 优化,它比 Counter 稍快一些(参见 f.e Surprising results with Python timeit: Counter() vs defaultdict() vs dict() )。
<小时/><强> normal dicts并设置默认值或测试/添加,获取计数为1的:
# normal dict - setdefault
def find_uniq(arr):
c = dict()
for a in arr:
c.setdefault(a,0)
c[a] += 1
return [number for number,count in c.items() if count == 1]
print(find_uniq( [1,2,3,4,2,3,4,5,6,4,5,6,7,8,9])) # [1, 7, 8, 9]
# normal dict - test and add
def find_uniq(arr):
c = dict()
for a in arr:
if a in c:
c[a] += 1
else:
c[a] = 1
return [number for number,count in c.items() if count == 1]
print(find_uniq( [1,2,3,4,2,3,4,5,6,4,5,6,7,8,9])) # [1, 7, 8, 9]
Setdefault 每次都会创建默认值 - 它比 Counter 或 defaultdict 慢,但比使用 test/add 更快。
<小时/><强> itertools.groupby (需要排序列表!),获取计数为1的:
from itertools import groupby
def find_uniq(arr):
return [k for (k,p) in groupby(sorted(arr)) if len(list(p)) == 1]
print(find_uniq( [1,2,3,4,2,3,4,5,6,4,5,6,7,8,9])) # [1, 7, 8, 9]
groupby 需要一个排序列表,单独的列表排序是 O(n * log n) ,组合起来比其他方法慢。
关于python - 查找唯一号码的代码又慢又低效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242219/
我写了一个函数,应该用值替换两个定界符之间的代码,它返回(我将其应用到的字符串是 HTML 对象的 .outerHTML)。 这将类似于它在例如中的使用方式。 Vue.js 或 Angular。 看起
好的,我有一个 Django View ,如下所示: @render_to('home/main.html') def login(request): # also tried Client.
由于我创建的几乎所有项目都包含 ListView,因此我想到创建一个类,其中包含修改 ListView 的所有重要功能。它看起来像这样: 主窗体: ListViewFunctions LVF = ne
The default implementation on Stream creates a new single-byte array and then calls Read. While this
我当然不是 Drupal 专家,但我之前设计并构建了一些数据库,所以我对第 3 方团队正在处理的数据库结构感到困惑,我已经将 Sequel Pro 添加到其中虚拟内容。我认为如果使用 Drupal 的
我想生成一个随机的短十六进制字符串(比如 8 位或 16 位)。 有很多选择可以做到这一点,例如,从我的头顶开始: uuid.uuid4().hex[:8] md5().hexdigest()[:8]
我是一名优秀的程序员,十分优秀!