*帮助*学习Python教程模块和包

时间:2013-05-17 20:50:27

标签: python

我在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']

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

3 个答案:

答案 0 :(得分: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已经预先对其结果进行排序,因此排序步骤实际上并不是必需的!

答案 1 :(得分:3)

您可以使用list comprehension打印该列表:

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

您当前正在调用list(x),其中x是一个字符串。这意味着它会将字符串转换为字符列表,这就是您看到['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

答案 2 :(得分:0)

我也被这个人困惑了一段时间。我的思路是通过查看RE(正则表达式)模块本身开始的,该模块包含一个字符串正则表达式搜索功能,我在下面使用它可以正常工作...

import re
mylist=[]
for x in dir(re):
    match = re.search('find', x)
    if match:
            mylist.append(x)
print mylist