相关疑难解决方法(0)

python中的零列表

如何创建list仅包含零的零件?我希望能够创造一个零list为每个intrange(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)

python

235
推荐指数
7
解决办法
38万
查看次数

[]和{} vs list()和dict(),哪个更好?

我明白它们本质上都是一样的,但在风格方面,哪个更好(更多Pythonic)用于创建空列表或字典?

python performance dictionary list

97
推荐指数
5
解决办法
10万
查看次数

为什么有时用{}替换set()?

在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 与字典不一样{}

如果它想要优化它,为什么这更有效?

python set

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

为什么如果True比1慢?

为什么if Trueif 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)

python performance if-statement boolean timeit

29
推荐指数
2
解决办法
7052
查看次数

用于创建集的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
查看次数

在Python中生成非常大的文本文件的时间性能

我需要生成一个非常大的文本文件.每一行都有一个简单的格式:

Seq_num<SPACE>num_val
12343234 759
Run Code Online (Sandbox Code Playgroud)

我们假设我将生成一个包含1亿行的文件.我尝试了两种方法,令人惊讶的是它们提供了非常不同的时间性能.

  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)
  2. 对于超过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)

注意:

  • 方法2有2个循环而不是1个循环.
  • 我在循环中写入方法1和方法2的文件.因此这两个步骤必须相同.

所以方法1必须花费更少的时间.什么提示我缺少什么?

python algorithm performance large-files large-data

12
推荐指数
3
解决办法
1085
查看次数

有没有办法将列表推导重写为for循环?

我有一行代码如下:

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)

或者是其他东西?

python python-3.x

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

为什么`{*l}`比`set(l)`更快 - python集(不仅仅适用于所有序列的集合)

所以这是我的时间:

>>> import timeit
>>> timeit.timeit(lambda: set(l))
0.7210583936611334
>>> timeit.timeit(lambda: {*l})
0.5386332845236943
Run Code Online (Sandbox Code Playgroud)

为什么这样,我的意见是平等的,但事实并非如此.

因此,从这个例子中拆包很快,对吧?

python timing set unpack sequence

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

为什么在比较2个元素时与使用if语句直接比较时max()函数这么慢?

通过运行以下代码,我获得了与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)

python max

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

为什么 set() 构造函数比 list() 慢

我计时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)

python performance list set

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

从元组python 3列表中只获取整数

我有一个像这样的元组列表:

[(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 tuples list python-3.5

-5
推荐指数
1
解决办法
166
查看次数