小编Tim*_*ker的帖子

Python NoneType对象不可调用(初学者)

我告诉我第1行和第5行(新的调试/编程,不确定是否有帮助)

def hi():     
    print 'hi'

def loop(f, n):         #f repeats n times
    if n<=0:
        return
    else:
        f()             
        loop(f, n-1)    

loop(hi(), 5)
hi
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

为什么它会给我这个错误?

python nonetype

39
推荐指数
2
解决办法
17万
查看次数

使用正则表达式查找除一个字符串外的所有字符串

我想匹配除字符串之外的所有字符串"ABC".例:

 "A"     --> Match
 "F"     --> Match
 "AABC"  --> Match
 "ABCC"  --> Match
 "CBA"   --> Match
 "ABC"   --> No match
Run Code Online (Sandbox Code Playgroud)

我尝试过[^ABC],但它忽略了"CBA"(和其他人).

regex

39
推荐指数
1
解决办法
8万
查看次数

HH的正则表达式模式:MM:SS时间字符串

我想解析一个hh:mm:ss字符串.一个简单的是([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 期望2:3:2402:03:24字符串.

我想更进一步,即使在像这样的情况下也要通过验证

  1. 如果你只输入56,它应该通过,因为56可以被认为是56秒[SS]
  2. 如果您输入2:3或02:03或02:3或2:03则应该通过.2分3秒[MM:SS]
  3. 如果你进入20:30:12传球20小时30分12秒[HH:MM:SS]
  4. 如果你输入78:12,不要过78分钟是错误的....

基本上,如果找到一个":",则将":"之前的数字视为MM,将":"之后的数字视为SS.如果发现两个":",则认为是HH:MM:SS

我想出了这种模式.

(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.我想知道任何其他更简单的正则表达式,它可以完成这项工作.

regex expression hour minute seconds

37
推荐指数
2
解决办法
7万
查看次数

在Python中合并/添加列表

我很确定应该有更多的Pythonic方法 - 但是我想不出一个:如何将二维列表合并到一维列表中?类似于zip/map但有两个以上的迭代器.

示例 - 我有以下列表:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)

我希望有

result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我想出的是:

def add_list(array):
    number_items = len(array[0])
    result = [0] * number_items
    for index in range(number_items):
        for line in array:
            result[index] += line[index]
    return result
Run Code Online (Sandbox Code Playgroud)

但对我来说,这看起来并不是非常优雅/ Pythonic.除了不检查2D阵列中的所有"线"是否具有相同的长度,可以相互添加等等.有什么更好的方法呢?

python list

34
推荐指数
4
解决办法
2万
查看次数

Ruby lookbehind断言(1.9/2.0)中是否存在错误?

为什么正则表达式不(?<=fo).*匹配foo(反之(?<=f).*)?

"foo" =~ /(?<=f).*/m          => 1
"foo" =~ /(?<=fo).*/m         => nil
Run Code Online (Sandbox Code Playgroud)

这似乎只在单线模式打开时发生(点匹配换行符); 没有它,一切都很好:

"foo" =~ /(?<=f).*/           => 1
"foo" =~ /(?<=fo).*/          => 2
Run Code Online (Sandbox Code Playgroud)

在Ruby 1.9.3和2.0.0上测试过.

在Rubular上看到它

编辑:更多观察:

添加行尾锚点不会改变任何内容:

"foo" =~ /(?<=fo).*$/m        => nil
Run Code Online (Sandbox Code Playgroud)

但与懒惰的量词一起,它"有效":

"foo" =~ /(?<=fo).*?$/m       => 2
Run Code Online (Sandbox Code Playgroud)

编辑:还有一些观察:

.+与它的等价物一样工作{1,},但仅限于Ruby 1.9(在这种情况下,这似乎是两者之间唯一的行为差异):

"foo" =~ /(?<=fo).+/m         => 2
"foo" =~ /(?<=fo).{1,}/       => 2
Run Code Online (Sandbox Code Playgroud)

在Ruby 2.0中:

"foo" =~ /(?<=fo).+/m         => nil
"foo" =~ /(?<=fo).{1,}/m      => nil
Run Code Online (Sandbox Code Playgroud)

.{0,} 被破坏(1.9和2.0):

"foo" …
Run Code Online (Sandbox Code Playgroud)

ruby regex lookbehind

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

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

"不......没什么"与"......没有"

这里有没有人使用VB.NET并且强烈偏好或反对使用Not foo Is Nothing而不是foo IsNot Nothing?如果是这样,为什么?

例如

If var1 IsNot Nothing Then
...
End If
Run Code Online (Sandbox Code Playgroud)

If Not var1 Is Nothing Then
...
End If
Run Code Online (Sandbox Code Playgroud)

我只是想知道哪一个更好?
他们都同样可以接受吗?

vb.net

30
推荐指数
3
解决办法
7万
查看次数

如何在Python 3.2或更高版本中使用'hex'编码?

在Python 2中,要获得字符串中十六进制数字的字符串表示,您可以这样做

>>> '\x12\x34\x56\x78'.encode('hex')
'12345678'
Run Code Online (Sandbox Code Playgroud)

在Python 3中,它不再起作用(在Python 3.2和3.3上测试):

>>> '\x12\x34\x56\x78'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex
Run Code Online (Sandbox Code Playgroud)

这里至少有一个答案提到hex在Python 3中已经删除了编解码器.但是,根据文档,它在Python 3.2中被重新引入,作为"字节到字节映射".

但是,我不知道如何使这些"字节到字节映射"工作:

>>> b'\x12'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
Run Code Online (Sandbox Code Playgroud)

而且文档也没有提到(至少不是我看的地方).我一定错过了一些简单的东西,但我看不出它是什么.

python encoding hex python-3.x

29
推荐指数
5
解决办法
3万
查看次数

正则表达式只匹配括号中的逗号?

我有一个类似于以下内容的字符串:

12,44,foo,bar,(23,45,200),6
Run Code Online (Sandbox Code Playgroud)

我想创建一个与逗号匹配的正则表达式,但只创建不在括号内的逗号(在上面的例子中,除了23和45之后的两个逗号之外的所有逗号).我该怎么做(Java正则表达式,如果这有所不同)?

java regex

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

你如何按数字排序文件?

首先,我发布这个是因为当我在寻找下面问题的解决方案时,我在stackoverflow上找不到一个.所以,我希望在这里添加一点知识库.

我需要处理目录中的一些文件,并且需要以数字方式对文件进行排序.我lambdawiki.python.org上找到了一些关于排序的例子 - 特别是使用模式 - 我把它放在一起:

#!env/python
import re

tiffFiles = """ayurveda_1.tif
ayurveda_11.tif
ayurveda_13.tif
ayurveda_2.tif
ayurveda_20.tif
ayurveda_22.tif""".split('\n')

numPattern = re.compile('_(\d{1,2})\.', re.IGNORECASE)

tiffFiles.sort(cmp, key=lambda tFile:
                   int(numPattern.search(tFile).group(1)))

print tiffFiles
Run Code Online (Sandbox Code Playgroud)

我仍然是Python的新手,并且想问社区是否可以对此进行任何改进:缩短代码(删除lambda),性能,样式/可读性?

谢谢Zachary

python sorting

25
推荐指数
4
解决办法
2万
查看次数

标签 统计

regex ×5

python ×4

encoding ×1

expression ×1

hex ×1

hour ×1

java ×1

list ×1

lookbehind ×1

minute ×1

nonetype ×1

python-3.x ×1

ruby ×1

seconds ×1

sorting ×1

vb.net ×1