小编And*_*ark的帖子

打印对象如何产生与str()和repr()不同的输出?

我在解释器上测试了一些代码,我注意到了这个sqlite3.Row类的一些意外行为.

我的理解是print obj总是得到相同的结果print str(obj),并且obj在解释器中输入将得到相同的结果print repr(obj),但是不是这样的情况sqlite3.Row:

>>> print row       # the row object prints like a tuple
(u'string',)
>>> print str(row)  # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>

>>> row             # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
Run Code Online (Sandbox Code Playgroud)

我认为sqlite3.Row必须是它的子类tuple,但我仍然不明白幕后可能会导致这种行为的是什么.有谁能解释一下?

这是在Python 2.5.1上测试的,不确定其他Python版本的行为是否相同. …

python sqlite

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

Python十进制对象中NaN之后的数字含义

我正在阅读文档中有效十进制字符串语法的词法定义,decimal.Decimal以下内容让我觉得奇怪:

nan            ::=  'NaN' [digits] | 'sNaN' [digits]
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来很奇怪,但显然数字可以包含在'NaN'之后没有任何问题,但是'NaN'之后除了数字之外的任何字符都会引发InvalidOperation.

>>> Decimal('NaN10')
Decimal('NaN10')
Run Code Online (Sandbox Code Playgroud)

所以我对此有几个问题:

  1. 作为其一部分的数字是什么意思NaN
  2. NaN数字的实例与"正常"的行为有何不同NaN
  3. NaN除了以这种方式初始化之外,有没有办法获得数字?
  4. Python中除了可以跟随数字的Decimal类之外还有其他地方NaN吗?

谢谢!

python

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

在python中无法获得单个\

我正在努力学习python,而且我对它很陌生,我无法想象这一部分.基本上,我现在正在做的是获取网页的源代码,并取出所有不是文字的东西.

网页上有很多\n和\ t,我想找到一些可以找到它的东西,并删除它与下一个'之间的所有内容.

def removebackslash(source):
    while(source.find('\') != -1):
        startback = source.find('\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source
Run Code Online (Sandbox Code Playgroud)

就是我拥有的.它不会像这样工作,因为\'它不会关闭字符串,但是当我更改\为时\\,它会将字符串解释为\\.我无法弄清楚任何被解释的东西'\'

python

9
推荐指数
2
解决办法
505
查看次数

Perl可以一次性用自己的替代词替换多个关键词吗?

考虑一个包含以下内容的文本文件:

apple apple pear plum apple cherry pear apple  
cherry plum plum pear apple cherry pear pear apple plum
Run Code Online (Sandbox Code Playgroud)

并考虑perl one-liner:

perl -pe "s/apple/green/g and s/pear/yellow/g and s/plum/blue/g and s/cherry/red/g" < fruits.txt
Run Code Online (Sandbox Code Playgroud)

这取代了每种水果的颜色.
现在,这可以用一个s /// g以某种方式完成,而不是上面的四个吗?

我也关注水果词的顺序.
如果我的样本不包含"apple",则其他替换都不会完成.我该怎么解决这个问题?

请注意:我希望将解决方案保持为单行.
因此,定义哈希,读取文件以及需要多行perl代码的其他解决方案并不能让我前进.

这更像是一种好奇心,而不是一个项目所依赖的生死攸关的问题.现在困扰我好几天了,并且认为一个更有经验的perl用户可以帮助解决心跳,或者让我摆脱困境,直接告诉我这不可能按照我想要的方式完成.

regex perl

8
推荐指数
3
解决办法
7438
查看次数

Python在功能级别VS导入.模块级别

如有疑问,我通常会将导入语句放在模块的顶部.通常,这会减少重复,这很好.但是,在只有一个函数(或类)需要导入的情况下,是否存在性能下降?

在调用函数时,是否只导入以下内容?

     def func():
         from task import test
Run Code Online (Sandbox Code Playgroud)

如果是这样,我想这可能是一个微小的效率.我还假设你可以为更快的垃圾收集和变量作用域获得一些附加点,因为导入的对象不会被添加到全局字典中.正如另一张海报很好地说:

这主要是由于查找变量.查找全局范围中的变量需要查找字典.相反,编译器静态地确定本地名称并通过索引引用它们,因此不需要查找字典.

那些公平的假设是我完全偏离基础吗?

谢谢

python import scope

8
推荐指数
2
解决办法
7043
查看次数

遍历和修改类似于dict结构的树状列表

我有一个看起来像这样的结构:

[ {'id': 4, 'children': None},
  {'id': 2, 'children': 
    [ {'id': 1, 'children':
        [ {'id': 6, 'children': None},
          {'id': 5, 'children': None} ]
      },
      {'id': 7, 'children':
        [ {'id': 3, 'children': None} ]
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我还有一个选定的ID列表[4, 5, 6, 7].我想遍历列表,并为列表中的每个对象添加selected一个值,1如果选中它,0如果不是,则添加值.

目前我正在使用此函数递归执行此操作:

def mark_selected(tree, selected):
    for obj in tree:
        obj['selected'] = 1 if obj['id'] in selected else 0
        if obj['children'] is not None:
            obj['children'] = mark_selected(obj['children'], selected)
    return tree
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但我想知道是否有更聪明的方法来做到这一点,可能使用列表理解或生成器.

任何人都可以为此提出更优雅的解决方案吗?

python

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

用于读取噪声比特流的冗余算法

我正在读一个有损的比特流,我需要一种方法来恢复尽可能多的可用数据.可以有1代替0和0代表1,但准确度可能超过80%.

如果算法可以补偿丢失/太多位,则可以获得奖励.

我正在读取的信号源是噪声模拟(麦克风通过FFT),读取时序可能因计算机速度而异.

我记得读过CD-ROM中使用的算法吗?层,所以我猜测使用几个层是一个不错的选择.我不记得细节,所以如果有人可以分享一些很棒的想法!:)

编辑:添加样本数据

Best case data:
 in: 0000010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111
out: 0010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111011

Bade case (timing is off, samples are missing):
out: 00101010000101101001011011001110000001001001011011001110000001001000011000000100001011101010011011001
 in: 00111101001011111110010010111111011110000010010000111000011101001101111110000110111011110111111111101

Edit2:我能够控制发送的数据.目前正在尝试实现简单的XOR检查(虽然这还不够).

.net c# algorithm

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

for循环期间列表/字典分配有什么用处吗?

我昨天在这个问题上看到了一些我以前没见过的代码,特别是这一行:

for xyz[num] in possible[num]:
    ...
Run Code Online (Sandbox Code Playgroud)

因此,当此循环运行时,元素将possible[num]被分配到xyz位置的列表num.我真的很困惑,所以我做了一些测试,这里有一些更明确的等效代码:

for value in possible[num]:
    xyz[num] = value
    ...
Run Code Online (Sandbox Code Playgroud)

我绝对打算总是使用第二种格式,因为我发现第一种格式比它的价值更令人困惑,但我很好奇......所以:

是否有充分的理由使用这个"功能",如果没有,为什么允许?

以下是我提出的几个愚蠢的用例(愚蠢因为有更好的方法可以做同样的事情),第一个用于将字母表的字母旋转13个位置,第二个用于创建字典,将字符从rot13映射到字符13个位置.

>>> import string
>>> rot13 = [None]*26
>>> for i, rot13[i%26] in enumerate(string.ascii_lowercase, 13): pass
...
>>> ''.join(rot13)
'nopqrstuvwxyzabcdefghijklm'

>>> rot13_dict = {}
>>> for k, rot13_dict[k] in zip(rot13, string.ascii_lowercase): pass
...
>>> print json.dumps(rot13_dict, sort_keys=True)
{"a": "n", "b": "o", "c": "p", "d": "q", "e": "r", "f": "s", "g": "t", "h": "u", "i": "v", …
Run Code Online (Sandbox Code Playgroud)

python

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

Python:打印没有括号和单引号的列表?

我有一个充满IP地址的列表.我想遍历列表并打印每个IP地址.当我尝试这样做时:

def printList(theList):
    for item in theList:
        print item
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

['8.0.226.5']
['8.0.247.5']
['8.0.247.71']
['8.0.249.28']
['8.0.249.29']
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,包括循环中的"print item [0]".我究竟做错了什么?

python printing loops list

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

如何在Python中移动小数位?

我目前正在使用以下内容来计算两次差异.外出非常快,因此无论如何我都不需要显示仅为0.00的小时和分钟.我如何在Python中实际移位小数位?

def time_deltas(infile): 
    entries = (line.split() for line in open(INFILE, "r")) 
    ts = {}  
    for e in entries: 
        if " ".join(e[2:5]) == "OuchMsg out: [O]": 
            ts[e[8]] = e[0]    
        elif " ".join(e[2:5]) == "OuchMsg in: [A]":    
            in_ts, ref_id = e[0], e[7] 
            out_ts = ts.pop(ref_id, None) 
            yield (float(out_ts),ref_id[1:-1], "%.10f"%(float(in_ts) - float(out_ts)))

INFILE = 'C:/Users/kdalton/Documents/Minifile.txt'
print list(time_deltas(INFILE))
Run Code Online (Sandbox Code Playgroud)

python decimal

5
推荐指数
2
解决办法
9841
查看次数

标签 统计

python ×8

.net ×1

algorithm ×1

c# ×1

decimal ×1

import ×1

list ×1

loops ×1

perl ×1

printing ×1

regex ×1

scope ×1

sqlite ×1