在Python中编辑字符串以找到字谜

-4 投票
4 回答
528 浏览
提问于 2025-04-17 19:14

给定这个字符串...

able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n

我想知道怎么把这个字符串里的每个单词都放到一个变量里,然后把这些单词按字母顺序排序。这样我就可以比较它们,看看哪些是变位词,哪些不是。我大约有一个月的Python经验,所以请尽量把内容讲得简单易懂。

4 个回答

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',
 ...

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

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() 来对你的列表进行排序,这样它就会按字母顺序排列。

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

撰写回答