是否有内置的等效于C#的Enumerable.Single()?

时间:2016-01-07 18:00:51

标签: python

在C#中,如果你有一个可枚举的并尝试在其上调用.Single(),如果它中没有一个元素就会抛出错误。

是否有类似内置的Python内容?

 var atLeastOneCategoryMissingEntities = _(this.list)
            .pluck("items")
            .map((m:any) => {
                return _.pluck(m, "id");
            })
            .some((arr) => {
                var val = _.difference(arr, this.anotherList);
                return val.length === arr.length;
            });

list:[
{
  category:{
      name: "",
      id:""
  },
  items:[{
      name:"",
      id:""
 }]
}
]

2 个答案:

答案 0 :(得分:12)

不是内置的方法,但有一种惯用的方法来实现相同的目标:

如果(value,) = iterable不包含任何一个元素,

ValueError会引发iterable

单个元素将存储在value中,因此您的示例可以简化为:

(value,) = iterable
return value

解包是assignment operator的一项功能。

  

如果目标列表是以逗号分隔的目标列表:对象必须是与目标列表中的目标具有相同数量的项目的可迭代对象,并且项目从左到右分配到相应的目标。

答案 1 :(得分:4)

我不认为你可以简化它:

def single(iterable):
    if len(iterable) != 1:
        raise Error("...")
    return iterable[0]