如何知道列表是否只包含1个元素而不使用len

时间:2017-01-30 01:26:12

标签: python

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

在这两种解决方案之间进行此操作的最佳方式是什么?或者也许这些都不是pythonic,如果是这样的话呢?

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

try:
    a_list.pop(1):
except IndexError:
    #blah

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

if not a_list[1:]:
    # blah 

3 个答案:

答案 0 :(得分:4)

Python的一个哲学思想是,要求宽恕比要求许可更容易(Python glossary)。

从这个意义上讲,检查列表是否至少包含一个元素的最Pythonic方法是尝试并访问索引0处的元素。

try:
    some_list[0]
except IndexError:
    print("some_list is empty").

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

现在,如果你想检查一个列表是否完全一个元素,一连串的tryexcept可以完成这项工作,但它将变得不可读。< / p>

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

if len(some_list) == 1:
    print("some_list has exactly one element")

您评论说您不想使用len

我建议您使用我在上面提到的tryexcept的继承:

try:
    l[0]
except IndexError:
    print("length = 0")
else:
    try:
        l[1]
    except IndexError:
        print("length = 1")
    else:
        print("length > 1")

答案 1 :(得分:1)

您不希望在适当的位置改变列表(例如,使用.pop())。要检查列表是否包含仅一个元素,您可以使用几个tryexcept语句检查(1)是否可以访问第一个元素,(2),您无法访问第二个元素。

def is_single_item_list(list_to_check):
    #Check that list is not empty
    try:
        _ = list_to_check[0]
    except IndexError:
        return False
    #Return true if list has a single element
    try:
        _ = list_to_check[1]
    except IndexError:
        return True
    #Return False if more than one element
    return False

真的,最恐怖的方法就是使用len

答案 2 :(得分:0)

每个列表都有一个长度。

if len(my_list) < 2:
    print("too short")