は、私は、このようなファイルに書き込み、リスト内(各単語が5文字の長さ)と同じ3つの真ん中の文字を含む単語を検索するプログラムを書く必要があります同じような言葉の間に私は空の行を残す必要があります。私はちょっと固まっている。 これを行う方法はありますか?私はPython 3.2を使用します。検索と書き込み
ありがとうございました。
は、私は、このようなファイルに書き込み、リスト内(各単語が5文字の長さ)と同じ3つの真ん中の文字を含む単語を検索するプログラムを書く必要があります同じような言葉の間に私は空の行を残す必要があります。私はちょっと固まっている。 これを行う方法はありますか?私はPython 3.2を使用します。検索と書き込み
ありがとうございました。
開始するには:組み込みの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])
を見ることができます。
これには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
'groupby'を使う前にデータをソートするべきです – jfs
試してみてください。
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')
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
私はなぜそれがgsadkとcsadeの間に入っているのでしょうか? –
私たちにいくつかのコードを提供する... – joaquin
あなたは同じ3つの中間の文字を意味するのですか?または、同じ3人の中文字? – wim