关于这个问题的讨论让我感到疑惑,所以我决定运行一些测试并比较创建时间set((x,y,z))
与{x,y,z}
在Python中创建集合(我使用的是Python 3.7).
我使用time
和比较了这两种方法timeit
.两者都是一致*,结果如下:
test1 = """
my_set1 = set((1, 2, 3))
"""
print(timeit(test1))
Run Code Online (Sandbox Code Playgroud)
结果:0.30240735499999993
test2 = """
my_set2 = {1,2,3}
"""
print(timeit(test2))
Run Code Online (Sandbox Code Playgroud)
结果:0.10771795900000003
所以第二种方法几乎比第一种方法快3倍.这对我来说是一个非常惊人的差异.幕后发生了什么,以这种方式优化设置文字的性能set()
?哪种情况最合适?
*注意:我只显示timeit
测试结果,因为它们在许多样本上取平均值,因此可能更可靠,但测试时的time
结果在两种情况下都显示出类似的差异.
编辑:我知道这个类似的问题,虽然它回答了我原来问题的某些方面,但它没有涵盖所有这些问题.在问题中没有解决集合,并且由于空集在python中没有文字语法,我很好奇(如果有的话)使用文字的集合创建与使用该set()
方法不同.另外,我想知道的是如何处理的元组参数中set((x,y,z)
会在幕后,什么是运行时可能产生的影响.coldspeed的最佳答案有助于澄清问题.
The problem is I have to print all combinations of a sequence of
numbers from 1 to N
that will always result to zero. It is allowed
to insert "+"
(for adding) and "-"
(for subtracting) between each
numbers so that the result will be zero.
//Output
N = 7
1 + 2 - 3 + 4 - 5 - 6 + 7 = 0
1 + 2 - 3 - 4 + 5 + 6 - 7 = 0 …
Run Code Online (Sandbox Code Playgroud) 我需要在具有一定宽度和高度的矩形上平均分配 N 个点。
前任。给定一个 10x10 的盒子和 100 个点,点将设置为:
(1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (1,10)
(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (2,10)
(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (3,10)
...
...
Run Code Online (Sandbox Code Playgroud)
我如何将其概括为任何 N 点、宽度和高度组合?
注意:它不需要是完美的,但很接近,无论如何我都会随机化一点(从 X 和 Y 轴上的这个“起点”移动点 +/- x 像素),所以有一个剩下的几个点在最后随机添加可能就好了。
我正在寻找这样的东西(准随机):
algorithm ×2
equals ×1
height ×1
java ×1
performance ×1
points ×1
python ×1
python-3.x ×1
set ×1
width ×1