如何在不使用 len 的情况下知道列表是否仅包含 1 个元素

vil*_*ric 2 python

我想知道一个列表是否只包含一个元素,而不使用len.

在这两种解决方案之间,最pythonic的方法是什么?或者也许这些都不是pythonic,如果是,那又是什么?

解决方案 a:删除位置 1 处的项目,除了 an,IndexError所以我知道只有 1 个项目。

try:
    a_list.pop(1):
except IndexError:
    #blah
Run Code Online (Sandbox Code Playgroud)

解决方案b:使用切片删除第一个元素并检查列表现在是否为空

if not a_list[1:]:
    # blah 
Run Code Online (Sandbox Code Playgroud)

Rig*_*leg 9

Python 的哲学之一是,请求宽恕比请求许可更容易(Python 词汇表)。

从这个意义上说,检查列表是否至少有一个元素的最 Pythonic 方法是尝试并访问 index 处的元素0

try:
    some_list[0]
except IndexError:
    print("some_list is empty").
Run Code Online (Sandbox Code Playgroud)

请注意,会pop改变列表,这不是您在测试中想要的。

现在如果你想检查一个列表是否只有一个元素,一系列的tryandexcept可以完成这项工作,但它会变得不可读。

最好的方法可能是直接len检查:

if len(some_list) == 1:
    print("some_list has exactly one element")
Run Code Online (Sandbox Code Playgroud)

您评论说您不想使用len.

我建议你使用我上面提到的try和的继承except

try:
    l[0]
except IndexError:
    print("length = 0")
else:
    try:
        l[1]
    except IndexError:
        print("length = 1")
    else:
        print("length > 1")
Run Code Online (Sandbox Code Playgroud)