【问题标题】:Pythonic way to get list element when expectation is that list contains only a single element?当期望列表仅包含单个元素时获取列表元素的Pythonic方法?
【发布时间】:2014-04-28 00:52:10
【问题描述】:

我经常遇到这样的情况,即查询一些返回列表的数据源,但我希望该列表只包含一个元素。现在我做:

el = result_list[0]

如果列表为空,可能会在 try 块中。但是,我不喜欢它。什么是最好的方法?这样做会很酷:

el = result_list.only()

如果列表为空或包含多个元素,这可能会导致呕吐。

【问题讨论】:

  • Pythonic 通常不会在这样的事情上失败,但如果你需要,我会检查 len==1 并在必要时引发 ValueError。
  • 很多东西(比如数据库)为fetch_one而不是fetch_all提供了一个API,所以如果所说的源提供这样的方法(或者你可以写一个)我会这样做。跨度>

标签: python list built-in idioms


【解决方案1】:

在 Python 2 或 3 中:

>>> a, = [1]
>>> a
1

>>> a, = []
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 0 values to unpack

>>> a, = [1,2,3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)

在 Python 3 中,您还可以

>>> a,*_ = [1,2,3]
>>> a
1

【讨论】:

  • 当然!干得好,谢谢。我会在几分钟后接受这个。
猜你喜欢
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 2011-12-29
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多