-1

我被困在 learnpython.org 上的一个关于模块和包的练习中。

练习是:在本练习中,您将需要打印 re 模块中所有函数的字母排序列表,其中包含单词 find。

我放的代码:

 import re
for x in dir(re):
    if x[:4] == "find":
        print x

代码输出:

findall
finditer

预期输出:

['findall', 'finditer']

我之后尝试了什么:

import re
for x in dir(re):
    if x[:4] == "find":
        print list(x)

我得到了什么:

['f', 'i', 'n', 'd', 'a', 'l', 'l']
['f', 'i', 'n', 'd', 'i', 't', 'e', 'r']

请帮助我,我可以弄清楚该怎么做...

4

3 回答 3

4

由于结果是一个字符串,因此通过使用list(x)您将其转换为字符列表 - 而不是只需打印x即可获取字符串。您想要做的是附加到列表然后对其进行排序......

import re
names = []
for name in dir(re):
    if name[:4] == 'find':
        names.append(name)

names.sort()
print names

可以将其编写为生成器并使用以下命令进行排序sorted

print sorted(name for name in dir(re) if name.startswith('find'))

注意 - 正如Simeon Visser友好地指出的那样 -dir已经对其结果进行了预排序,因此实际上不需要排序步骤!

于 2013-05-17T20:52:09.167 回答
3

您可以使用列表推导来打印该列表:

import re
print [x for x in dir(re) if x[:4] == "find"]

您当前正在调用list(x)wherex是一个字符串。这意味着它将字符串转换为字符列表,这就是为什么您会看到诸如['f', 'i', 'n', 'd', 'a', 'l', 'l'].

如果您尚未阅读有关列表推导的内容,您可以执行以下操作:

import re
result = []
for x in dir(re):
    if x[:4] == "find":
        result.append(x) 
print result

这也将建立相同的列表。您还可以使用startswith()

import re
result = []
for x in dir(re):
    if x.startswith("find"):
        result.append(x) 
print result
于 2013-05-17T20:52:58.967 回答
0

我也被这个迷惑了一段时间。我的思路是从查看 RE(正则表达式)模块本身开始的,该模块本身包含一个字符串正则表达式搜索函数,我在下面使用它,它工作得很好......

import re
mylist=[]
for x in dir(re):
    match = re.search('find', x)
    if match:
            mylist.append(x)
print mylist
于 2013-09-04T22:27:32.500 回答