其實你的解決方案是錯誤的,並使用2 for
循環的想法是沒有效率的。你正在迭代你的列表2次,並在你的元素上應用''.join(sorted())
兩個時間,你也在比較每個元素與它自己!而不是你可以使用字典來獲取字謎元素的索引與遍歷列表的enumerate
:
>>> d={}
>>> for i,j in enumerate(b):
... d.setdefault(''.join(sorted(j)),[]).append(i)
...
>>> d
{'arst': [3], 'dgo': [1, 2], 'alp': [4], 'act': [0, 5]}
>>> [b[t] for k in d.values() if len(k)>1 for t in k]
['dog', 'god', 'cat', 'act']
如果你在乎的順序,你可以用OrderedDict
功能從collections
模塊:
>>> from collections import OrderedDict
>>> d=OrderedDict()
>>> for i,j in enumerate(b):
... d.setdefault(''.join(sorted(j)),[]).append(i)
...
>>> [b[t] for k in d.values() if len(k)>1 for t in k]
['cat', 'act', 'dog', 'god']
您的意思是說,數組中的所有元素都應該是結果中的字母? – shunya