2011-12-17 17 views
-1

は、私は、このようなファイルに書き込み、リスト内(各単語が5文字の長さ)と同じ3つの真ん中の文字を含む単語を検索するプログラムを書く必要があります同じような言葉の間に私は空の行を残す必要があります。私はちょっと固まっている。 これを行う方法はありますか?私はPython 3.2を使用します。検索と書き込み

ありがとうございました。

+0

私はなぜそれがgsadkとcsadeの間に入っているのでしょうか? –

+1

私たちにいくつかのコードを提供する... – joaquin

+0

あなたは同じ3つの中間の文字を意味するのですか?または、同じ3人の中文字? – wim

答えて

1

開始するには:組み込みのsorted関数を単語のリストに入れて試してみてください。鍵は、slice(1, 4)を試してみてください。例えば

some_list = ['wasdy', 'casde', 'tasdf', 'gsadk', 'other', 'csade', 'hsadi'] 
sorted(some_list, key = lambda x: sorted(x[1:4])) 
# outputs ['wasdy', 'casde', 'tasdf', 'gsadk', 'csade', 'hsadi', 'other'] 

編集:それはあなたが「同じ3つの真ん中の文字が、順番に」または単に「同じ3つの真ん中の文字が」望んでいたかどうか私には不明でした。後者の場合は、代わりにsorted(some_list, key = lambda x: x[1:4])を見ることができます。

2

これにはitertools.groupby関数を使用します。 wordlistがグループ化したい単語のリストであると仮定すると、このコードはトリックを行います。

import itertools 

for k, v in itertools.groupby(wordlist, lambda word: word[1:4]): 
    # here, k is the key the words are grouped by, i.e. word[1:4] 
    # and v is a list/iterable of the words in the group 
    for word in v: 
     print word 
    print 

itertools.groupby(wordlist, lambda word: word[1:4])は基本的に、すなわち3つの真ん中の文字、word[1:4]によってすべての単語、およびグループ化を行います。ここにあなたのサンプルデータと上記のコードの出力は次のとおりです。

wasdy 
casde 
tasdf 

gsadk 
csade 
hsadi 
  
+3

'groupby'を使う前にデータをソートするべきです – jfs

1

試してみてください。

from collections import defaultdict 
dict_of_words = defaultdict(list) 
for word in list_of_words: 
    dict_of_words[word[1:-1]].append(word) 

、その後、出力ファイルに書き込む:

with open('outfile.txt', 'w') as f: 
    for key in dict_of_words: 
     f.write('\n'.join(dict_of_words[key]) 
     f.write('\n') 
0
word_list = ['wasdy', 'casde','tasdf','gsadk','csade','hsadi'] 

def test_word(word): 
    return all([x in word[1:4] for x in ['a','s','d']]) 

f = open('yourfile.txt', 'w') 
f.write('\n'.join([word for word in word_list if test_word(word)])) 
f.close() 

リターン:

wasdy 
casde 
tasdf 
gsadk 
csade 
hsadi