我被分配到lexiographicaly组合ana克。
以下是其中一个测试用例:
输入:
eat tea tan ate nat bat
输出:
ate eat tea
bat
nat tan
但是,我继续得到以下输出,其中字谜被封装在列表中,并且每行打印的顺序每次都不同:
['ate', 'eat', 'tea']
['nat', 'tan']
['bat']
或
['nat', 'tan']
['bat']
['ate', 'eat', 'tea']
或
['ate', 'eat', 'tea']
['bat']
['nat', 'tan']
如何解决此问题,以便输出而不会在列表中加盖,并且可能以正确的顺序排列?
这是我到目前为止所做的:
import sys
from collections import *
def ComputeAnagrams(string):
d = defaultdict(list)
for word in string:
key = ''.join(sorted(word))
d[key].append(word)
return d
def main():
for string in sys.stdin:
stringList = string.split()
if len(stringList) == 0:
break
d = ComputeAnagrams(stringList)
for key,anagrams in d.items():
if len(anagrams) >=1:
print(sorted(anagrams))
print ('')
main()
注意:运行此程序的机器从stdin / keyboard读取输入并将输出打印到控制台(stdout)。
答案 0 :(得分:1)
我认为问题是 -
print(sorted(''.join(anagrams)))
在将列表加入字符串后使用sorted
,在这种情况下,sorted会按排序顺序返回一个字符列表(我猜这是你得到的当前输出)。
如果您希望元素按排序顺序排序,则应在anagrams
列表中使用,而不是在加入后使用字符串。示例 -
print(', '.join(sorted(anagrams)))
我也使用', '
来加入字符串,以便使用,
作为分隔符,否则输出将是所有字符串在一起,中间没有任何空格,如果你愿意,你可以使用你想要的任何其他分隔符。
演示 -
经过上述变更后 -
输入 -
eat tea tan ate nat bat
输出 -
bat
ate, eat, tea
nat, tan