小编jtb*_*tbr的帖子

如何在python 3中模拟python 2 str.lower()

python 2.7.15和3.7.2如何执行小写操作之间似乎有区别.

我有一个大字典和一个大型列表,使用python 2编写,但我想在python 3中使用(使用pickle从文件导入).对于字符串列表中的每个项目,在python2 lower()案例的dict中有一个键.不幸的是,它们与python3 lower()案例不同.

unicode.lower()在python 3中运行时,如何获得python 2返回的答案?

python 3列表中的字符串示例是'?le',其小写字母是'i?le'(顺便说一下,它不是ascii 'ile').这不在字典中.从泡菜,3为读取什么蟒"?le"被读入蟒2作为u'\u0130le',小写其中是"ile"(将ASCII字符串),它在字典.这就是我需要回归的东西.

为了澄清,我正在添加一个例子(后者是ascii字符串).

python 2.7:

>>> u"\u0130le".lower() == "ile"
>>> True
Run Code Online (Sandbox Code Playgroud)

python 3.7:

>>> u"\u0130le".lower() == "ile"
>>> False
Run Code Online (Sandbox Code Playgroud)

python python-2.7 python-3.x

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

使用浮点常数进行设置和检查

我知道这里有很多关于为什么浮点相等比较通常是一个坏主意的问题。我理解浮点表示问题、舍入问题、将浮点无声地提升为双精度、依赖位级别算术的危险等。但在我看来,这应该没问题,而且我发现的任何问题似乎都没有涵盖这一点:

static const float MARKER = -500.0f; // some value well outside the range of valid values
std::vector<float> some_floats = {MARKER, 0.5f, 100.0f, 9.5f, MARKER, 0.f};
for (size_t i = 0; i< some_floats.size(); ++i) {
    if (some_floats[i] == MARKER) {             
       std::cout << i << std::endl;
    } else {
       // do some math
    }
}
Run Code Online (Sandbox Code Playgroud)

输出如预期:

0
4
Run Code Online (Sandbox Code Playgroud)

如果我-Wfloat-equal启用了(在 gcc 中,但在其他编译器中类似),它会将比较行标记为危险: comparing floating point with == or != is unsafe。这里几乎所有的答案都说不要使用 == 或 !=, period。但我不明白为什么这里有问题。我只设置该常量一次,然后在其他使用它的地方重复使用它,并且永远不会对该常量进行任何操作(例如算术)。我错过了什么吗?0.0f即使没有设置为常数,又怎么样?

c++ floating-point

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

标签 统计

c++ ×1

floating-point ×1

python ×1

python-2.7 ×1

python-3.x ×1