搜索和写作

时间:2011-12-17 15:56:55

标签: python python-3.x

我需要编写一个程序,在列表中查找具有相同三个中间字符(每个单词长度为5个字符)的单词,然后将它们写入如下文件:

wasdy
casde
tasdf

gsadk
csade
hsadi

在类似的词之间我需要留空线。我有点卡住了。 有没有办法做到这一点?我使用Python 3.2。

感谢您的帮助。

4 个答案:

答案 0 :(得分: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
 

答案 1 :(得分: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 :(得分: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' )

答案 3 :(得分: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