当期望列表仅包含单个元素时获取列表元素的Pythonic方法?

Posted

技术标签:

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

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

el = result_list[0]

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

el = result_list.only()

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

【问题讨论】:

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

【讨论】:

当然!干得好,谢谢。我会在几分钟后接受这个。

以上是关于当期望列表仅包含单个元素时获取列表元素的Pythonic方法?的主要内容,如果未能解决你的问题,请参考以下文章

Python检查列表是不是仅包含空元素或空格

为啥带有单个条目的python列表为-1索引和0索引提供第0个元素? [复制]

当列表填充数组时,如何在 SwiftUI 中获取列表中元素的索引?

使用 Python 将多个字符串元素列表转换为单个元素以逗号分隔的列表

从 boost::python::object 列表中获取单个元素,用于 python 例程

当列表填满屏幕时,列表下面的android元素消失了