【问题标题】:Is there any simple way to return single value from the list in python? [duplicate]有没有简单的方法从 python 的列表中返回单个值? [复制]
【发布时间】:2018-03-27 07:24:49
【问题描述】:

假设我们有一个列表:x = [5, 5, 2, 5, 5, 3, 3, 4, 4]。如何返回此列表中仅出现一次的数字,即 2?

在尝试解决 Codewars 上的 "Find the odd int" 问题时提出了这个问题。最初我没有正确理解这个任务,但可以更容易地解决它,所以在解决之前仔细阅读它:)

最后使用下面的代码来解决它(它不是完整的解决方案,而是它的一部分,在从输入创建字典后使用):

return [int(k) for k,v in d.items() if v%2==1][0]

【问题讨论】:

  • @the.salman.a:不是真的——那是因为你已经知道要计算哪个项目了。正如最佳答案所述,如果您计算列表中的所有项目,性能会变得很糟糕。
  • 到目前为止,您尝试过什么来解决您的问题。堆栈溢出不是免费的编码服务。你也必须表现出你的努力。
  • @TimPietzcker:使用正确的方法,可以在 O(N) 时间内轻松计算列表中的所有项目。
  • 这只是另一个任务的一部分。我试过了,但找不到同样的问题。
  • @VikasDamodar,我不知道 Counter 集合,并尝试使用标准 for 循环和 if...else 程序来解决这个问题

标签: python numbers


【解决方案1】:
>>> x = [5, 5, 2, 5, 5, 3, 3, 4, 4, 8]
>>> from collections import Counter
>>> c = Counter(x)
>>> [item[0] for item in c.items() if item[1]==1]
[2, 8]

【讨论】:

  • 假设他们知道只有一个项目会出现一次是不安全的。
  • @Alex:是的,最好让解决方案更通用。
【解决方案2】:

您可以使用collections.Counter 来实现此目的。 list comprehension 下面将返回列表中出现过的所有元素的列表:

>>> from collections import Counter
>>> x = [5, 5, 2, 5, 5, 3, 3, 4, 4]

>>> [k for k, v in Counter(x).items() if v==1]
[2]

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多