如何让这个Python函数返回一个字符串而不是一个包含一个字符串的列表?

时间:2016-10-08 23:05:24

标签: python string

如何让这个Python函数返回一个字符串而不是一个包含一个字符串的列表?

<body>
  <form id="upload">
    <input type="file" id="vidInput">
    <span id="submitFile" 
      style="-webkit-appearance:button;-moz-appearance:button;padding:4px;font-family:arial;font-size:12px">Upload Video</span>
  </form>
  <script>
    function uploadMyVid(event) {

      // FETCH FILEIST OBJECTS
      var vidFile = document.getElementById('vidInput').files;

      var xmlhttp = new XMLHttpRequest;

      xmlhttp.open('PUT', "upload_link_secure");

      var data = new FormData();
      data.append("file", vidFile[0], vidFile[0].name);

      xmlhttp.send(data);

    }

    var button = document.getElementById("submitFile");
    button.addEventListener("click", uploadMyVid);
  </script>
</body>

一些测试用例:

def num_vowels(s):
    """ returns the number of vowels in the string s
        input: s is a string of 0 or more lowercase letters
    """
    if s == '':
        return 0
    else:
        num_in_rest = num_vowels(s[1:])
        if s[0] in 'aeiou':
            return 1 + num_in_rest
        else:
            return 0 + num_in_rest

#most vowels returns a list not a string
def most_vowels(wordlist):
    '''Takes a list of strings called wordlist and returns the string in
       the list with the most vowels.'''
    list_of_num_vowels = [num_vowels(x) for x in wordlist]
    max_val =  max(list_of_num_vowels)
    return [x for x in wordlist if num_vowels(x) == max_val] 

输出:most_vowels(['vowels', 'are', 'amazing', 'things'])

'amazing'

输出:most_vowels(['obama', 'bush', 'clinton'])

谢谢!

3 个答案:

答案 0 :(得分:1)

您的most_vowels()函数使用list comprehension过滤掉匹配的值并返回新列表。您可以通过两种方式直接输出字符串。

第一种方法是从理解结果中索引第一个结果。

return [x for x in wordlist if num_vowels(x) == max_val][0]

另一个选项,如果你认为你可能得到多个结果但仍想要一个字符串,那就是用逗号(或其他分隔符)将任何结果加入到字符串中。

return ','.join([x for x in wordlist if num_vowels(x) == max_val])

这会将['first', 'second']转换为'first,second'

答案 1 :(得分:0)

通过将num_vowels作为key传递,您可以通过比较元音的数量而不是通常的字符串排序来直接从max得到答案:

def most_vowels(wordlist):
    return max(worldlist, key=num_vowels)

或者,您找到max_val元音的方式最多,可以使用next和理解过滤器:

    return next(word for word in wordlist
                if num_vowels(word) == max_val)

答案 2 :(得分:0)

你的most_vowels功能重新发明轮子。 Python已经为您提供了一个更简单的工具 - 使用带有可选key参数的max,并且只选择具有最多元音的单词:

def most_vowels(wordlist):
    return max(wordlist, key=num_vowels)