在python中编辑字符串以查找字谜

时间:2013-03-15 16:56:33

标签: python python-3.x anagram

鉴于字符串...... able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n

我试图弄清楚如何将字符串中的每个单词分配给变量,然后按字母顺序对每个单词进行排序,这样我就可以比较它们,看看哪些是字谜,哪些不是。我有大约一个月的Python经验,所以如果可能的话,所有的一切都是愚蠢的。

4 个答案:

答案 0 :(得分:5)

不应将每个单词保存到变量,而应将它们全部保存到列表中。以下是我将如何处理完整问题:

from itertools import groupby
from operator import itemgetter

s = 'able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n'
words = s.strip().split()
sorted_words = (''.join(sorted(line)) for line in words)
grouped = sorted((v, i) for i, v in enumerate(sorted_words))
anagrams = [[words[i] for v, i in g] for k, g in groupby(grouped, itemgetter(0))]

结果:

>>> import pprint
>>> pprint.pprint(anagrams)
[['able', 'bale'],
 ['binary', 'brainy'],
 ['boat'],
 ['acre', 'care', 'race'],
 ['cater', 'crate', 'react', 'trace'],
 ['cat'],
 ['lawn'],
 ['beyond'],
 ['sheet'],
 ['list', 'silt', 'slit']]

答案 1 :(得分:0)

In [27]: s = 'able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n'

In [28]: words = s.split()

In [29]: [''.join(sorted(w)) for w in words]
Out[29]: 
['abel',
 'acer',
 'abel',
 'bdenoy',
 'abinry',
 'abot',
 'abinry',
 ...

答案 2 :(得分:0)

你可以yourstring.split('whattosplitat')。在这种情况下,那将是

l='able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n'.split('\n')

然后你可以l.sort()按字母顺序对列表进行排序。

答案 3 :(得分:0)

s = 'able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n'
words = sorted(s.split('\n')[:-1]) # the last one will be '', so you want to get rid of that

测试字符串是否是另一个字符串的字谜:

def isAnagram(a, b):
    aLtrs = sorted(list(a)) # if a='test', aLtrs=['e', 's', 't', 't']
    bLtrs = sorted(list(a)) # same as above
    return True if aLtrs==bLtrs else False