小编Lac*_*bus的帖子

处理字符串时的 str.isdigit() 行为

假设如下:

\n
>>> square = '\xc2\xb2'      # Superscript Two (Unicode U+00B2)\n>>> cube  = '\xc2\xb3'       # Superscript Three (Unicode U+00B3)\n
Run Code Online (Sandbox Code Playgroud)\n

奇怪的是:

\n
>>> square.isdigit()\nTrue\n>>> cube.isdigit()\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n

好的,让我们将这些“数字”转换为整数:

\n
>>> int(square)\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nValueError: invalid literal for int() with base 10: '\xc2\xb2'\n>>> int(cube)\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nValueError: invalid literal for int() with base 10: '\xc2\xb3'\n
Run Code Online (Sandbox Code Playgroud)\n

哎呀!

\n

有人可以解释一下我应该期待什么行为吗str.isdigit()在处理字符串时我应该从该方法中得到什么行为吗?

\n

python python-3.x

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

PostgreSQL窗口函数

请考虑以下表结构:

CREATE TABLE tb_log
(
  id INTEGER PRIMARY KEY,
  moment DATE,
  old INTEGER,
  actual INTEGER
);
Run Code Online (Sandbox Code Playgroud)

包含数据:

INSERT INTO
  tb_log ( id, moment, old, actual )
VALUES
  ( 1, '2018-06-19', 10, 20 ),
  ( 2, '2018-06-21', 20, 30 ),
  ( 3, '2018-06-25', 30, 40 );
Run Code Online (Sandbox Code Playgroud)

我试图从tb_log一个值生效的期间(开始日期和结束日期)开始.

试验#1 - 使用lag()功能:

SELECT
  lag( moment ) OVER (ORDER BY moment) date_start,
  moment AS date_end,
  old AS period_value
FROM
   tb_log;
Run Code Online (Sandbox Code Playgroud)

返回以下数据:

| date_start |   date_end | period_value |
|------------|------------|--------------|
| …
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions

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

实现 copy.deepcopy() 克隆函数

仅出于教育目的,我正在尝试实现copy.deepcopy().

在玩了一些有趣的代码和谷歌搜索之后,我想出了以下功能:

def my_deepcopy(data):

    if isinstance(data, dict):
        result = {}
        for key, value in data.items():
            result[key] = my_deepcopy(value)

        assert id(result) != id(data)

    elif isinstance(data, list):
        result = []
        for item in data:
            result.append(my_deepcopy(item))

        assert id(result) != id(data)

    elif isinstance(data, tuple):
        aux = []
        for item in data:
            aux.append(my_deepcopy(item))
        result = tuple(aux)

        assert id(result) != id(data)

    elif isinstance(data, (int, float, type(None), str, bool)):
        result = data
    else:
        raise ValueError("unexpected type")

    return result
Run Code Online (Sandbox Code Playgroud)

它似乎适用于所有 Python 原始类型及其组合:

# Various …
Run Code Online (Sandbox Code Playgroud)

python deep-copy

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

awk:从字符串中转义正则表达式运算符的函数

需要一个函数来转义包含 awk 脚本中的正则表达式运算符的字符串。

我遇到了这个“丑陋”的解决方案:

function escape_string( str )
{
    gsub( /\\/, "\\\\",  str );
    gsub( /\./, "\\.", str );
    gsub( /\^/, "\\^", str );
    gsub( /\$/, "\\$", str );
    gsub( /\*/, "\\*", str );
    gsub( /\+/, "\\+", str );
    gsub( /\?/, "\\?", str );
    gsub( /\(/, "\\(", str );
    gsub( /\)/, "\\)", str );
    gsub( /\[/, "\\[", str );
    gsub( /\]/, "\\]", str );
    gsub( /\{/, "\\{", str );
    gsub( /\}/, "\\}", str );
    gsub( /\|/, "\\|", str );

    return …
Run Code Online (Sandbox Code Playgroud)

regex bash awk gawk

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

标签 统计

python ×2

awk ×1

bash ×1

deep-copy ×1

gawk ×1

postgresql ×1

python-3.x ×1

regex ×1

sql ×1

window-functions ×1