2011-12-17 18 views
-1

我需要編寫一個程序,查找具有相同的中間三個字符字(每個字是5個字符)的列表,然後將它們寫入到一個像這樣的文件:搜索和寫作

wasdy 
casde 
tasdf 

gsadk 
csade 
hsadi 

在我需要留下空行的相似詞語之間。我有點卡住了。 有沒有辦法做到這一點?我使用Python 3.2。

感謝您的幫助。

+0

我不知道爲什麼它會在gsadk和csade之間輸入一個輸入。 – 2011-12-17 16:00:18

+1

給我們一些代碼,從... – joaquin 2011-12-17 16:04:47

+0

你的意思是相同的三個中間字符,爲了?或者只是三個中間字符? – wim 2011-12-17 16:18:48

回答

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'] 

編輯:這是我不清楚你是否想「相同的中間三個字符,以」或只是「相同的三個中間人物」。如果是後者,那麼你可以看看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])基本上採用所有的話,和組他們通過word[1:4],即中間三個字符。下面是上面代碼的輸出與您的樣本數據:

wasdy 
casde 
tasdf 

gsadk 
csade 
hsadi 
  
+3

你應該在使用'groupby'之前對數據進行排序 – jfs 2011-12-17 16:14:59

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