如何编写一个函数,将三元组['a','b','c']转换成单个字符串“abc”

2024-04-25 14:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些帮助来完成下周一的家庭作业。我是一个编程初学者,我的任务是编写一个函数,将像['a','b','c']这样的字符串转换成类似“abc”的东西

我已经试了一段时间了,但是我好像想不通。如果有人能帮助我,告诉我我犯了什么错误,还有什么需要改进,我会非常感激的!你知道吗

这就是我要改变的:

content = ["[['a','b','c'],['a','b1','c2'],['a2','b2','c']]\n",         
         '[[\'Spain\',\'name\',\'"Spain"\'],[\'Spain\',\'capital\',\'Madrid\'],
          [\'Madrid\',\'a\',\'Capital\']] \n', 
         '[[\'Spain\',\'name\',\'"Spain"\'], 
          [\'Spain\',\'capital\',\'Madrid\'],
          [\'Madrid\',\'a\',\'Capital\'],[\'Capital\',\'a\',\'City\'],    
          [\'Spain\',\'neighbours\',\'France\'],[\'Spain\',\'a\',\'Country\']] \n']

这是我目前的代码:

def makesimple(triple):
    ## It is a suggestion to first write a function that transforms the triples ...
    for i in content:
        v = i.split("\n")

        ii = "\t".join(v)

    pass

def ntriple(graph):
    ## ... and then loops through all triples in the graph
    for i in range(len(graph)):
        return(graph[i:])       

        pass

for l in content:
    print(ntriple(eval(l.strip())))

结果应该是这样的:

    ['a b c .', 'a b1 c2 .', 'a2 b2 c .']
    ['Spain name "Spain" .', 'Spain capital Madrid .', 'Madrid a Capital .']
    ['Spain name "Spain" .', 'Spain capital Madrid .', 'Madrid a Capital .', 'Capital a City .', 'Spain neighbours France .', 'Spain a Country .']

但我得到的结果是:

    [['a', 'b', 'c'], ['a', 'b1', 'c2'], ['a2', 'b2', 'c']]
    [['Spain', 'name', '"Spain"'], ['Spain', 'capital', 'Madrid'],     ['Madrid', 'a', 'Capital']]
    [['Spain', 'name', '"Spain"'], ['Spain', 'capital', 'Madrid'], ['Madrid', 'a', 'Capital'], ['Capital', 'a', 'City'], ['Spain', 'neighbours', 'France'], ['Spain', 'a', 'Country']]

我真的希望这是足够清楚,提前感谢您的帮助很多!你知道吗


Tags: nameina2citycontentb2b1graph
3条回答

回答标题中的问题,您可以这样做:

import ast

s = "['a','b','c']"
l = ast.literal_eval(s)
' '.join(l) + ' .'

问题是函数只返回整个graph,而不是将其转换为字符串。你知道吗

def ntriple(graph):
    for i in range(len(graph)):
        return(graph[i:]) # return `graph` from 0 to the end
        pass              # this part is never reached, neither is the rest of the loop

相反,如果总是正好有三个元素,则可以使用format字符串:

def ntriple(graph):
    return "{} {} {} .".format(*graph)

示例:

content = [['Spain', 'name', 'Spain'], ['Spain', 'capital', 'Madrid'], ['Madrid', 'a', 'Capital']]
for l in content:
  print(ntriple(l))

结果:

Spain name Spain .
Spain capital Madrid .
Madrid a Capital .

对于您的“字符串列表列表”格式:(a)如果不一定要使用,请不要使用该格式,(b)其中似乎有一些放错位置的引号,(c)修复这些后,您仍然有一个列表列表,即您不能直接将ntriple应用于eval(l),而是应用于该列表中的每个元素:

content = ["[['a','b','c'],['a','b1','c2'],['a2','b2','c']]\n",         
    "[[\'Spain\',\'name\',\'Spain\'],[\'Spain\',\'capital\',\'Madrid\'], [\'Madrid\',\'a\',\'Capital\']] \n", 
    "[[\'Spain\',\'name\',\'Spain\'],[\'Spain\',\'capital\',\'Madrid\'],[\'Madrid\',\'a\',\'Capital\'],[\'Capital\',\'a\',\'City\'],    [\'Spain\',\'neighbours\',\'France\'],[\'Spain\',\'a\',\'Country\']] \n"]

for l in content:
    lst = eval(l.strip())
    print([ntriple(x) for x in lst])

结果:

['a b c .', 'a b1 c2 .', 'a2 b2 c .']
['Spain name Spain .', 'Spain capital Madrid .', 'Madrid a Capital .']
['Spain name Spain .', 'Spain capital Madrid .', 'Madrid a Capital .', 'Capital a City .', 'Spain neighbours France .', 'Spain a Country .']

使用列表理解和ast.literal_eval

[[' '.join(l) + ' .' for l in literal_eval(elem)] for elem in content]

完整代码:

from ast import literal_eval

content = ["[['a','b','c'],['a','b1','c2'],['a2','b2','c']]\n",
'[[\'Spain\',\'name\',\'"Spain"\'],[\'Spain\',\'capital\',\'Madrid\'], [\'Madrid\',\'a\',\'Capital\']] \n',
'[[\'Spain\',\'name\',\'"Spain"\'],[\'Spain\',\'capital\',\'Madrid\'],[\'Madrid\',\'a\',\'Capital\'],[\'Capital\',\'a\',\'City\'],[\'Spain\',\'neighbours\',\'France\'],[\'Spain\',\'a\',\'Country\']] \n']

print([[' '.join(l) + ' .' for l in literal_eval(elem)] for elem in content])

这将导致:

[['a b c .', 'a b1 c2 .', 'a2 b2 c .'], ['Spain name "Spain" .', 'Spain capital Madrid .', 'Madrid a Capital .'], ['Spain name "Spain" .', 'Spain capital Madrid .', 'Madrid a Capital .', 'Capital a City .', 'Spain neighbours France .', 'Spain a Country .']]

相关问题 更多 >