我需要编写一个程序,在列表中查找具有相同三个中间字符(每个单词长度为5个字符)的单词,然后将它们写入如下文件:
wasdy
casde
tasdf
gsadk
csade
hsadi
在类似的词之间我需要留空线。我有点卡住了。 有没有办法做到这一点?我使用Python 3.2。
感谢您的帮助。
答案 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