我在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']
请帮助我,我可以弄清楚该怎么做......
答案 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