鑑於串... able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n
字符串編輯找到字謎
我試圖弄清楚如何將每個單詞指定字符串中的變量,然後按字母順序排序的每個字,這將使我比較他們看哪些是anagrams,哪些不是。如果可以的話,我有大約一個月的Python經驗,如此愚蠢。
鑑於串... able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n
字符串編輯找到字謎
我試圖弄清楚如何將每個單詞指定字符串中的變量,然後按字母順序排序的每個字,這將使我比較他們看哪些是anagrams,哪些不是。如果可以的話,我有大約一個月的Python經驗,如此愚蠢。
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',
...
我認爲OP希望對每個單詞進行「排序」(今天有作業分配),以檢測字符串。 – 2013-03-15 16:59:06
@MartijnPieters:這更有意義。糾正。 – NPE 2013-03-15 17:00:31
不知道爲什麼你爲你的第一個版本downvoted。 – 2013-03-15 17:01:15
你可以做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()
將字母順序排序列表。
而不是將每個單詞保存到變量,您應該將它們全部保存到列表中。這是我怎麼會接近完整的問題:
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']]
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
'isAnagram(「aab」,「abb」)'對我來說返回'True',但我認爲'False'。 – Kevin 2013-03-15 17:36:44
@Kevin這隻會處理帶有唯一字母的單詞(每個單詞只有一個單詞)......但是,您可以採用不同的方式;我會編輯我的答案。 – 2013-03-15 21:07:00
唐不要將每個單詞分配給一個變量。改爲將所有單詞分配給列表。 – 2013-03-15 16:58:41
你有什麼嘗試過這個嗎?發佈代碼以顯示你正在做的事情總會產生更好的答案,因爲它表明你正在嘗試而不是簡單地回答問題。 – 2013-03-15 16:59:30
您之前詢問過每個問題,但我沒有看到如何再次提出要求。另外,你不會通過自己嘗試任何東西而直接獲取代碼。 – 2013-03-15 16:59:46