Python函数返回带引号

时间:2017-07-03 21:48:13

标签: python python-3.x

我有一个函数并返回三个值,我的函数的返回值是

(1, 3, "<class 'int'>")

我想要回归

(1, 3, <class 'int'>)

如何从return value.str(type(element))中删除引号是返回第3个值的值

def is_list_permutation(L1, L2):
    L1set = set(L1)
    L2set = set(L2)
    count = 0
    element = ''
    if L1 == [] and L2 == []:
        return(None,None,None)    
    elif len(L1) == len(L2) and L1set == L2set:
       for a in L1:
          if L1.count(a) == L2.count(a):
              if L1.count(a) > count:
                  count = L1.count(a)
                  element = a
                  return(element,count,str(type(element)))
          else:
              return False
              break

    else:
       return False

所以如果我给

L1 = [1, 'b', 1, 'c', 'c', 1]
L2 = ['c', 1, 'b', 1, 1, 'c']

然后结果是(1, 3, "<class 'int'>"),而我想要(1, 3, <class 'int'>)

2 个答案:

答案 0 :(得分:1)

它周围总会有一些引号,因为它是一个字符串!

如果您想在字符串None时返回"",那么您可以这样做:

x = str(type(s))
return(element, count, x if x else None)

答案 1 :(得分:1)

您的函数返回一个包含三个元素的元组:elementcountelement类型的字符串表示形式。在任何情况下,这都有你在那里看到的任何字符串表示。你只需要取回一个元组。

现在,当你打印那个元组时,print函数实际上会尝试将其转换为字符串。对于元组,此字符串表示被定义为一组括号(),以及内部每个元组元素的repr()字符串表示。

对于数字,这看起来很好,因为repr(5)恰好是字符串'5'。但对于字符串,repr将添加引号以确保返回字符串是有效的Python代码:

>>> repr('foo')
"'foo'"
>>> print(repr('foo'))
'foo'

现在,当你说,你想要没有这些引号的结果时,你必须考虑实际意味着什么。您可以自己轻松格式化结果字符串。例如:

return '({0}, {1}, {2})'.format(element, count, str(type(element)))

这将返回一个字符串,它看起来就像你想要的那样。

然而,通过这样做,您也会丢失返回元组时的信息。现在,您只返回一个没有关于实际源值的信息的字符串。因此,如果不再解析字符串,则无法取出count值。

所以,想想你想做什么:你真的只想要一些好的打印,或者你真的想要将这三个值单独作为返回值,以便能够在之后的其他内容中使用它们吗? / p>

如果您已将返回值作为元组,则可以考虑稍后以所需格式打印文本...

顺便说一句:请注意,当不调用str(type(element))而只调用type(element)时,您将获得一个类型元素(而不是字符串)。并且类型元素的repr()恰好是您想要的。因此,作为快速解决方案,您可以随时摆脱那里的str()电话。