【问题标题】:How to get few specific strings from a list of string?如何从字符串列表中获取几个特定的​​字符串?
【发布时间】:2017-11-30 15:20:15
【问题描述】:

我有一个字符串列表和一个函数 getVowel。
此函数返回字符串中存在的元音数。 这是示例代码。

s = "hello ,this is a string"
no = getVowel(s)
lis = []
lis.append(s)

假设我在列表 lis 中有 n 个字符串。
如何获得其中元音最多的前 3 个字符串。

【问题讨论】:

  • getVowel的内容是什么?
  • 与问题相关吗?
  • 是的,因为getVowel 应该负责查找元音的数量。
  • 是的,它完美地完成了它的工作。

标签: python string python-3.x python-2.7


【解决方案1】:

sorted(lis, key=lambda x:getVowel(x), reverse=True)[:3]

类似的东西。顺便说一句,根据 Python 代码约定,函数的正确名称应该是 get_vowel。

【讨论】:

  • 最好使用heapq.nlargest()(而不是sorted()
  • 值得商榷。如果您想动态地向结构中添加更多元素,heapq 是一个不错的选择。性能方面sorted 的排序速度比heapq 快。
  • 对于n 的小值(这里是n=3),heapq 更好,这就是这个函数的重点
  • 非常感谢@Georgi Karadjov。
  • 即使这是真的(不太确定,应该对其进行分析)-heapq 是一个二叉堆-您应该仅在需要时使用此类结构,在此可能没有必要案子。如果我们假设heapq 确实更快 - 经验法则是不要过度设计解决方案 - 你需要前 3 名,对其进行排序并获得前 3 名。不要让完美成为美好的敌人。
【解决方案2】:

基于这个答案: https://stackoverflow.com/a/9887456/4671300

from heapq import nlargest
results = nlargest(3, lis, key=getVowel)

【讨论】:

    【解决方案3】:

    假设您的函数 getVowel 确实有效,请尝试以下操作:

    sorted(lis, key=lambda x: getVowel(x), reverse=True)[:3]
    

    排序文档:https://docs.python.org/3.6/library/functions.html?highlight=sorted#sorted

    【讨论】:

      【解决方案4】:

      sorted 列表中取出最后三个元素比取反然后取出前三个更有效。

      为此,只需使用[-3:] 进行索引即可:

      sorted(lis, key=lambda I: getVowel(i))[-3:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        • 2015-11-23
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多