2011-01-15 20 views
0
 
#!/usr/bin/python 
#this looks for words in dictionary that begin with 'in' and the suffix is a real word 
wordlist = [line.strip() for line in open('/usr/share/dict/words')] 
newlist = [] 
for word in wordlist: 
    if word.startswith("in"): 
     newlist.append(word) 
for word in newlist: 
    word = word.split('in') 
print newlist 

「in」という文字列を、それが始まるすべての単語から削除するにはどうすればよいですか?今すぐ動作しませんpython - 配列内の単語から文字列を削除する

+0

「in」という接頭辞が付いている単語のみを検索している場合、「in」で始まるすべての単語が他の単語とは逆のものではないことに注意してください。例えば、「腸」、「注射」など – BoltClock

+0

@BoltClock:そういう場合、「睾丸」と「ject」は単語ではありません。しかし、 "inquest"は問題になります。 –

+0

@Davidドイツ語:まったく。 – BoltClock

答えて

1

split()は、分割によって得られたセグメントのリストを返します。さらに、

word = word.split('in') 

は、リストを変更しないだけで、反復される変数を変更するだけです。

これであなたの第二のループを交換してみてください:

for i in range(len(newlist)): 
    word = newlist[i].split('in', 1) 
    newlist[i] = word[1] 
+0

ありがとうございました - これは大変です – tekknolagi

+0

これは、 "無限"のような接頭辞でない部分文字列を含む単語に問題があります。 –

+1

@David German:「1」を渡すとそのことが処理されます。 – BoltClock

0

wordlistが単語のリストであるとします。リスト内の単語の数が非常に大きい場合whileループを使用することをお勧めし

for i in range(len(wordlist)): 
    if wordlist[i].startswith("in"): 
     wordlist[i] = wordlist[i][2:] 

:コードに続いて、トリックを行う必要があります。

+0

私はモジュールをインポートする必要がありますか? ltrimは受け入れ可能な属性ではないようです。 – tekknolagi

+0

@tekknolagi:私はそれが 'lstrip()'であると考えています – BoltClock

+0

ああ、それはいくつかのことを解決するでしょう.... – tekknolagi

1

それはあなただけ「の」しかし「の」あなたが次に除去とで始まる単語をしたい場合は、newlistで何をしたいあなたの質問から言うことは困難ですsliceを使用することができます:あなたは、彼らが削除「で」持っていた後wordlistに残っている「中」で始まる単語をしたい場合は

newlist = [word[2:] for word in wordlist if word.startswith('in')] 

(あなたがあなたのコメントに「本物」で何を意味するのかということでしょうか?)あなたは少しdiffeを必要とする家賃:Pythonで私たちはlistを使用することを

newlist = [word for word in wordlist if word.startswith('in') and word[2:] in wordlist 

注意、ない "アレイ"。ファイルが常に適切に閉じられている保証します「で」を使用して

+1

これはすばらしい答えです。しかし、その2番目のリストの理解は、単語リストの長さではO(N^2)になります。それがあなたが望む行動であり、単語リストが大きければ、トライを考えてみてください。http://en.wikipedia.org/wiki/Trie –

2
#!/usr/bin/env python 

# Look for all words beginning with 'in' 
# such that the rest of the word is also 
# a valid word. 

# load the dictionary: 
with open('/usr/share/dict/word') as inf: 
    allWords = set(word.strip() for word in inf) # one word per line 
  1. 私はallWordsをセットにします。これはまたすることができますそれを第二の方法をやって

    inWords = [word for word in (word[2:] for word in allWords if word.startswith("in")) if word in allWords] 
    

    のように、(1)運転後、

我々は

# get the remainder of all words beginning with 'in' 
inWords = [word[2:] for word in allWords if word.startswith("in")] 
# filter to get just those which are valid words 
inWords = [word for word in inWords if word in allWords] 

を行うか、単一の文にそれを実行することができ、それをOを探します内側のループにジェネレータを使用して、メモリ要件を減らしています。

+3

あなたの最後のリスト理解文は、舌ひねりの一つです。 – BoltClock

関連する問題