我想知道列表是否只包含一个元素,而不使用len
。
在这两种解决方案之间进行此操作的最佳方式是什么?或者也许这些都不是pythonic,如果是这样的话呢?
解决方案a:删除位置1的项目,IndexError
除外,所以我知道只有一项。
try:
a_list.pop(1):
except IndexError:
#blah
解决方案b:使用切片删除第一个元素并检查列表是否为空
if not a_list[1:]:
# blah
答案 0 :(得分:4)
Python的一个哲学思想是,要求宽恕比要求许可更容易(Python glossary)。
从这个意义上讲,检查列表是否至少包含一个元素的最Pythonic方法是尝试并访问索引0
处的元素。
try:
some_list[0]
except IndexError:
print("some_list is empty").
请注意pop
会改变列表,这不是您在测试中想要的。
现在,如果你想检查一个列表是否完全一个元素,一连串的try
和except
可以完成这项工作,但它将变得不可读。< / p>
最好的方法可能是直接len
检查:
if len(some_list) == 1:
print("some_list has exactly one element")
您评论说您不想使用len
。
我建议您使用我在上面提到的try
和except
的继承:
try:
l[0]
except IndexError:
print("length = 0")
else:
try:
l[1]
except IndexError:
print("length = 1")
else:
print("length > 1")
答案 1 :(得分:1)
您不希望在适当的位置改变列表(例如,使用.pop()
)。要检查列表是否包含仅一个元素,您可以使用几个try
,except
语句检查(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")