我需要編寫一個程序,查找具有相同的中間三個字符字(每個字是5個字符)的列表,然後將它們寫入到一個像這樣的文件:搜索和寫作
wasdy
casde
tasdf
gsadk
csade
hsadi
在我需要留下空行的相似詞語之間。我有點卡住了。 有沒有辦法做到這一點?我使用Python 3.2。
感謝您的幫助。
我需要編寫一個程序,查找具有相同的中間三個字符字(每個字是5個字符)的列表,然後將它們寫入到一個像這樣的文件:搜索和寫作
wasdy
casde
tasdf
gsadk
csade
hsadi
在我需要留下空行的相似詞語之間。我有點卡住了。 有沒有辦法做到這一點?我使用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']
編輯:這是我不清楚你是否想「相同的中間三個字符,以」或只是「相同的三個中間人物」。如果是後者,那麼你可以看看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])
基本上採用所有的話,和組他們通過word[1:4]
,即中間三個字符。下面是上面代碼的輸出與您的樣本數據:
wasdy
casde
tasdf
gsadk
csade
hsadi
你應該在使用'groupby'之前對數據進行排序 – jfs 2011-12-17 16:14:59
嘗試:
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之間輸入一個輸入。 – 2011-12-17 16:00:18
給我們一些代碼,從... – joaquin 2011-12-17 16:04:47
你的意思是相同的三個中間字符,爲了?或者只是三個中間字符? – wim 2011-12-17 16:18:48