2013-03-15 57 views
-4

鑑於串... able\nacre\nbale\nbeyond\nbinary\nboat\nbrainy\ncare\ncat\ncater\ncrate\nlawn\nlist\nrace\nreact\nsheet\nsilt\nslit\ntrace\n字符串編輯找到字謎

我試圖弄清楚如何將每個單詞指定字符串中的變量,然後按字母順序排序的每個字,這將使我比較他們看哪些是anagrams,哪些不是。如果可以的話,我有大約一個月的Python經驗,如此愚蠢。

+2

唐不要將每個單詞分配給一個變量。改爲將所有單詞分配給列表。 – 2013-03-15 16:58:41

+3

你有什麼嘗試過這個嗎?發佈代碼以顯示你正在做的事情總會產生更好的答案,因爲它表明你正在嘗試而不是簡單地回答問題。 – 2013-03-15 16:59:30

+3

您之前詢問過每個問題,但我沒有看到如何再次提出要求。另外,你不會通過自己嘗試任何東西而直接獲取代碼。 – 2013-03-15 16:59:46

回答

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

我認爲OP希望對每個單詞進行「排序」(今天有作業分配),以檢測字符串。 – 2013-03-15 16:59:06

+0

@MartijnPieters:這更有意義。糾正。 – NPE 2013-03-15 17:00:31

+0

不知道爲什麼你爲你的第一個版本downvoted。 – 2013-03-15 17:01:15

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

'isAnagram(「aab」,「abb」)'對我來說返回'True',但我認爲'False'。 – Kevin 2013-03-15 17:36:44

+0

@Kevin這隻會處理帶有唯一字母的單詞(每個單詞只有一個單詞)......但是,您可以採用不同的方式;我會編輯我的答案。 – 2013-03-15 21:07:00