如何创建list仅包含零的零件?我希望能够创造一个零list为每个int在range(10)
例如,如果int在范围内4我会得到:
[0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
并为7:
[0,0,0,0,0,0,0]
Run Code Online (Sandbox Code Playgroud) 我明白它们本质上都是一样的,但在风格方面,哪个更好(更多Pythonic)用于创建空列表或字典?
在PyCharm中,当我写道:
return set([(sy + ady, sx + adx)])
Run Code Online (Sandbox Code Playgroud)
它说"函数调用可以用set literal替换",所以它替换为:
return {(sy + ady, sx + adx)}
Run Code Online (Sandbox Code Playgroud)
这是为什么?set()Python中的A 与字典不一样{}?
如果它想要优化它,为什么这更有效?
为什么if True比if 1Python 慢?不if True应该比快if 1?
我试图学习这个timeit模块.从基础知识开始,我尝试了以下方法:
>>> def test1():
... if True:
... return 1
... else:
... return 0
>>> print timeit("test1()", setup = "from __main__ import test1")
0.193144083023
>>> def test2():
... if 1:
... return 1
... else:
... return 0
>>> print timeit("test2()", setup = "from __main__ import test2")
0.162086009979
>>> def test3():
... if True:
... return True
... else:
... return False
>>> …Run Code Online (Sandbox Code Playgroud) 关于这个问题的讨论让我感到疑惑,所以我决定运行一些测试并比较创建时间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的最佳答案有助于澄清问题.
我需要生成一个非常大的文本文件.每一行都有一个简单的格式:
Seq_num<SPACE>num_val
12343234 759
Run Code Online (Sandbox Code Playgroud)
我们假设我将生成一个包含1亿行的文件.我尝试了两种方法,令人惊讶的是它们提供了非常不同的时间性能.
对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后我将其写入文件.这种方法需要花费很多时间.
## APPROACH 1
for seq_id in seq_ids:
num_val=rand()
line=seq_id+' '+num_val
data_file.write(line)
Run Code Online (Sandbox Code Playgroud)对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后将其附加到列表中.当循环结束时,我迭代列表项并将每个项写入文件.这种方法花费的时间少得多.
## APPROACH 2
data_lines=list()
for seq_id in seq_ids:
num_val=rand()
l=seq_id+' '+num_val
data_lines.append(l)
for line in data_lines:
data_file.write(line)
Run Code Online (Sandbox Code Playgroud)注意:
所以方法1必须花费更少的时间.什么提示我缺少什么?
我有一行代码如下:
list1=[string1[i:i+int1] for i in range(0, len(string1), int1)]
Run Code Online (Sandbox Code Playgroud)
我记得我的老师说我们应该在有'for'的时候开始换行,是否有办法编写如下代码:
for i in range(0, len(string1), int1):
#something here
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
所以这是我的时间:
>>> import timeit
>>> timeit.timeit(lambda: set(l))
0.7210583936611334
>>> timeit.timeit(lambda: {*l})
0.5386332845236943
Run Code Online (Sandbox Code Playgroud)
为什么这样,我的意见是平等的,但事实并非如此.
因此,从这个例子中拆包很快,对吧?
通过运行以下代码,我获得了与if语句直接进行比较的速度,而if语句的速度几乎是使用max函数的4倍。
我试图了解其背后的原因。
比较:0.63s,最大:2.3s
import time
if _name_ == '_main_':
sim = 10**7
s = time.time()
for _ in range(sim):
if 1 > 2:
pass
res1 = time.time()-s
s = time.time()
for _ in range(sim):
max(1, 2)
res2 = time.time()-s
print('comparison : {:.2}s, max : {:.2}s'.format(res1, res2))
Run Code Online (Sandbox Code Playgroud) 我计时set()和list()构造函数。set()明显慢于list(). 我使用不存在重复项的值对它们进行了基准测试。我知道 set use hashtables 是它变慢的原因吗?
在撰写本文时(3 月8日),我正在使用 Python 3.7.5 [MSC v.1916 64 位 (AMD64)]、Windows 10。
#No significant changed observed.
timeit set(range(10))
517 ns ± 4.91 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
timeit list(range(10))
404 ns ± 4.71 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)Run Code Online (Sandbox Code Playgroud)
当大小增加set()变得非常慢时list()
# When …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的元组列表:
[(a,3), (b, 4), (c, 5), (d, 1), (e,2)]
Run Code Online (Sandbox Code Playgroud)
我想从中提取出这样的列表:
[3, 4, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我一直无法弄清楚如何做到这一点.
在这种情况下,可读性是速度的次要因素,因为这段代码将隐藏在一个相对好的评论函数中.
python ×11
performance ×5
set ×4
list ×3
python-3.x ×2
algorithm ×1
boolean ×1
dictionary ×1
if-statement ×1
large-data ×1
large-files ×1
max ×1
python-3.5 ×1
sequence ×1
timeit ×1
timing ×1
tuples ×1
unpack ×1