-1

モジュールとパッケージを参照するlearnpython.orgの演習に行き詰まっています。

演習: この演習では、単語 find を含む re モジュール内のすべての関数のアルファベット順に並べ替えられたリストを出力する必要があります。

私が入れたコード:

 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)あなたは現在、文字列である whereを呼び出し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
于 2013-05-17T20:52:58.967 に答える
0

私もこれにはしばらく戸惑いました。私の思考の列車は、RE(Regular Expressions)モジュール自体を見ることから始まりました。これには、以下のように使用した文字列正規表現検索関数が含まれており、正常に機能しました...

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 に答える