相关疑难解决方法(0)

为什么[]比list()更快?

我最近比较了处理速度[]和,list()并且惊讶地发现它的[]运行速度比它三倍list().我跑了相同的测试与{}dict(),结果几乎相同:[]{}两个花了大约0.128sec /百万次,而list()dict()大约花费每个0.428sec /万次.

为什么是这样?不要[]{}(可能()'',太)立即传回文字的一些空股票的份,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素?

我不知道这两种方法有何不同,但我很想知道.我无法在文档中或在SO上找到答案,搜索空括号结果比我预期的问题更多.

我拨打了我的时序结果timeit.timeit("[]")timeit.timeit("list()"),和timeit.timeit("{}")timeit.timeit("dict()"),分别比较列表和字典.我正在运行Python 2.7.9.

我最近发现的" 为什么是,如果真慢于如果为1? "来比较的性能if Trueif 1,似乎触及了类似的文字,对全局的情况; 也许值得考虑一下.

python performance list instantiation literals

679
推荐指数
5
解决办法
7万
查看次数

用于创建集的Python性能比较 - set()与{} literal

关于这个问题的讨论让我感到疑惑,所以我决定运行一些测试并比较创建时间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的最佳答案有助于澄清问题.

python performance set python-3.x

18
推荐指数
1
解决办法
1193
查看次数

如何检查 Pandas 行是否包含空集

我想检查 Pandas Dataframe 行的特定列中是否包含空集,即

d = {'col1': [1, 2], 'col2': [3, {}]}
df2 = pd.DataFrame(data=d)


    col1    col2
0   1       3
1   2       {}
Run Code Online (Sandbox Code Playgroud)

进而

df2['col_2_contains_empty_set'] = ? #  how to implement this
Run Code Online (Sandbox Code Playgroud)

应该给

    col1    col2    col_2_contains_empty_set
0   1       3       False
1   2       {}      True
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?做不到

bool(df['col2']) 
Run Code Online (Sandbox Code Playgroud)

或者

df['col2'].bool()
Run Code Online (Sandbox Code Playgroud)

我认为它们Series具有模糊的布尔值。

python boolean pandas

3
推荐指数
1
解决办法
2万
查看次数