算法在Python中的实现
我有某些算法需要实现。基本上规则是:
- 一行上的第一个空格分隔的标记将是正在定义的单词。
- 后面的标记将是定义。如果定义是“.”,则该词是原语,即没有定义的词。
- 输出是一个以逗号分隔的文本行,其中包含字典中的每个单词一次。每个单词只能在其定义中的所有单词之后打印。请注意,对于某些输入集,可能有多个有效输出。
例如输入:
Civic Honda Car
Honda Manufacturer
VW Manufacturer
Manufacturer .
Car .
Beetle VW Car
一些可能的输出:
Car, Manufactor, Honda, VW, Beetle, Civic
Manufacturer, VW, Car, Beetle, Honda, Civic
Manufacturer, Honda, VW, Car, Beetle, Civic
我的实现:
def defIt(pre, cur):
# If previous and current strings are the same, no action take
if pre == cur:
return pre
# Split two strings to list
l_pre = pre.split()
l_cur = cur.split()
# If previous string length is shorter than the current string length, then swap two lists
if len(l_pre) < len(l_cur):
l_pre, l_cur = l_cur, l_pre
found = False
for j, w_cur in enumerate(l_cur):
for i, w_pre in enumerate(l_pre):
if w_pre == w_cur:
found = True
return ' '.join(l_cur[j:] + l_cur[:j] + l_pre[:i] + l_pre[(i + 1):])
if not found:
return ' '.join(l_cur[1:] + [l_cur[0]] + l_pre)
只是无法正确执行。我缺少什么?多谢。
I have certain algorithm need to implement. Basically the rules are:
- The first whitespace-separated token on a line will be the word being defined.
- The later tokens will be the definition. If the definition is “.”, that word is a primitive, i.e., a word with no definition.
- The output is a single comma-separated line of text containing each word in the dictionary exactly once. Each word is only to be printed after all of the words in its definition. Note that for certain input sets, there may be multiple valid outputs.
For example the input:
Civic Honda Car
Honda Manufacturer
VW Manufacturer
Manufacturer .
Car .
Beetle VW Car
Some Possible Outputs:
Car, Manufactor, Honda, VW, Beetle, Civic
Manufacturer, VW, Car, Beetle, Honda, Civic
Manufacturer, Honda, VW, Car, Beetle, Civic
My implementation:
def defIt(pre, cur):
# If previous and current strings are the same, no action take
if pre == cur:
return pre
# Split two strings to list
l_pre = pre.split()
l_cur = cur.split()
# If previous string length is shorter than the current string length, then swap two lists
if len(l_pre) < len(l_cur):
l_pre, l_cur = l_cur, l_pre
found = False
for j, w_cur in enumerate(l_cur):
for i, w_pre in enumerate(l_pre):
if w_pre == w_cur:
found = True
return ' '.join(l_cur[j:] + l_cur[:j] + l_pre[:i] + l_pre[(i + 1):])
if not found:
return ' '.join(l_cur[1:] + [l_cur[0]] + l_pre)
Just cannot get it right. What do I missing? Thanks a lot.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用法:
结果列表中的每个单词都位于其所有“定义”单词之后。
Usage:
Every word in the resulting list comes after all its "definition" words.