小编tit*_*ree的帖子

是什么让 python 的 itertools.groupby 如此之快?

我正在评估外观和说序列的连续术语(更多关于它的信息:https : //en.wikipedia.org/wiki/Look-and-say_sequence)。

我使用了两种方法并对它们进行计时。在第一种方法中,我只是迭代每个术语来构建下一个。在第二个中,我曾经itertools.groupby()这样做过。时差相当大,所以我做了一个图来玩:

图形

是什么让itertools.groupby()效率如此之高?两种方法的代码如下:

第一种方法:

def find_block(seq):
    block = [seq[0]]
    seq.pop(0)

    while seq and seq[0] == block[0]:
        block.append(seq[0])
        seq.pop(0)

    return block

old = list('1113222113')
new = []
version1_time = []

for i in range(40):
    start = time.time()
    while old:
        block = find_block(old)
        new.append(str(len(block)))
        new.append(block[0])
    old, new = new, []
    end = time.time()
    version1_time.append(end-start)
Run Code Online (Sandbox Code Playgroud)

方法二:

seq = '1113222113'
version2_time = []

def lookandread(seq):
    new = ''
    for value, group in itertools.groupby(seq):
        new += '{}{}'.format(len(list(group)), …
Run Code Online (Sandbox Code Playgroud)

python iteration python-itertools python-3.x

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

为什么eval('"\ x27"')== eval('"\\ x27"')?

我对python的eval()非常困惑:

我试过eval('"\x27"') == eval('"\\x27"'),它评估为True.有人可以解释为什么会这样吗?两个表达式都评估为"'".我理解为什么eval('"\x27"')(评估的字符串有一个字符,这是一个表示撇号的转义十六进制),但不eval('"\\x27"')应该等于"\\x27"

其次,加上混乱,如果我设置以下变量,

s = "\x27"
t = "\\x27"
Run Code Online (Sandbox Code Playgroud)

然后eval('s')又是"'",但是eval('t')"\\x27".这是为什么?

python python-3.x

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

sys模块是否构建在每个python解释器中是什么意思?

我正在阅读官方的Python教程,它说

一个特定的模块值得注意:sys,它内置于每个Python解释器中.

但是,如果我启动python解释器并输入,例如sys.path,我得到了一个NameError: name sys is not defined.

因此,sys如果我想要访问它,我需要导入.

那么它是什么意思"它内置于每个python解释器中"?

python python-module built-in python-3.x

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

在c ++中,发生故障后是否需要stream.clear()?

我有以下代码:

string promptPlayerForFile(ifstream &infile, string prompt) {
    while (true) {
        string filename;
        cout << prompt;
        getline(cin, filename);
        infile.open(filename.c_str());
        if (!infile.fail()) return filename;
        infile.clear();
        cout << "Unable to open that file. Try again." << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数按预期工作:输入文件名,直到给出正确的文件名,在这种情况下,它将流与文件关联并返回文件名字符串.

然后我尝试评论该行infile.clear(),看看会发生什么.(我读到在发生故障后需要包含它才能重置流的相关位.)

但是,在对此进行注释后,该函数的行为与以前一样.如果我首先给出一个错误的文件名,然后一个正确的文件名就可以了,所以即使没有那行,故障位也会被重置.那么infile.clear()有必要,它的适当用途是什么?

c++ ifstream

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