2017-10-21 19 views
3

プログラムの書き込みは、文字列のリストを入力として受け取り、章番号を削除しようとしています。私は関数が書かれているが、それはうまくいきません。私は私の機能と出力のサンプルを提供しました!ありがとうございました!ここでPythonの文字列のリストから章番号を削除する

def remove_chapter(chapter_header): 
    for i in range(101): 
     chapters="Chapter " + str(i) 
     chapter_text=[my_string.replace(chapters,"") for my_string in chapter_header] 
    return chapter_text 

機能していない機能を備えた電流出力である:あなたのstringspython.reを使用するために、いくつかのバリエーション(chapter number)で、削除する必要が同様のパターを持って、より良いので Output

+0

あなたは 'for'ループ内に無条件の' return'文を持っています。これは一般的に悪い兆候です。なぜなら、最初の反復の後、つまり '' Chapter 0 "'の置換を行った後でループを終了するからです。 –

+0

編集しましたが、それでも正しく読み込まれません。 –

+0

for-loop 'chapter_text = chapter_header [:]'の前。そして、あなたのリストの理解の中で、 'chapter_header'ではなく' chapter_text'を繰り返します。そしてループからループを戻す。 –

答えて

0

。それで、pattern matchingに多くの柔軟性があります。

だから、すべてあなたがする必要があります。

>>> import re 
>>> [ re.sub('Chapter \d+ ', '', string) for string in chapter_header ] 

#driver値を:

IN : chapter_header = ['Chapter 1 It is ...','However little ...','Chapter 12 Lorem Ipsum'] 

OUT : ['It is ...', 'However little ...', 'Lorem Ipsum'] 

がそれを破壊、あなたのパターンは次のようになります。だから、

​​

、このパターンが見つかるたびに、文字列が置換されるか、見つからない場合は無視されます。

0

章のリストが与えられている場合、各章の最初の単語まで章と数字を削除できます。

import itertools as it 


chapters = [ 
    "Chapter 1 It is a truth universally acknowledged ...", 
    "Chapter 2 Mr. Bennet was among the earliest ...", 
    "Chapter 3 Not all that Mrs. Bennet, however, with ...", 
] 

コード

pred = lambda x: (x == "Chapter") or x.isdigit() 
results = [list(it.dropwhile(pred, [word for word in chapter.split()])) for chapter in chapters] 
results 

出力

[['It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...'], 
['Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...'], 
['Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...']] 

考える

詳細

リストの理解は、チャプターをリストとリスト内の単語に分割します。等価的に:最後に

for chapter in chapters: 
    print([word for word in chapter.split()]) 

# ['Chapter', '1', 'It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...'] 
# ['Chapter', '2', 'Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...'] 
# ['Chapter', '3', 'Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...'] 

itertools.dropwhile反復処理し、各リストと述語が長く真でなくなるまでの項目を削除します。言い換えれば、項目を先に落として、"Chapter"でも数字でもないようにしてください。

結果の章は、必要に応じて文字列として再結合することができます。

[" ".join(chapter) for chapter in results] 
# ['It is a truth universally acknowledged ...', 
# 'Mr. Bennet was among the earliest ...', 
# 'Not all that Mrs. Bennet, however, with ...'] 
関連する問題