我有一个空列表并填充了数据。我正在尝试将列表的最后一个元素存储到变量中。如果列表中有元素,则工作正常。但是,当我传递一个空的[]列表时,会出现类似IndexError: list index out of range
的错误。我应该为[]使用哪种语法?
ids = [
'abc123',
'ab233',
'23231ad',
'a23r2d23'
]
ids = []
# I tried these for empty
final = [ids if [] else ids[-1]] #error
# final = [ids if ids == None else ids == ids[-1]] # error
# final = [ids if ids == [] else ids == ids[-1]] # gives [[]] instead of []
print(final)
基本上,如果ID中有一个空列表,则需要它提供[]。如果有元素,则给出最后一个起作用的元素。
答案 0 :(得分:2)
这里是执行此操作的一种方法:
final = ids[-1] if ids else None
(将列表为空时,用您希望None
取的值替换final
。)
答案 1 :(得分:0)
final = ids[-1] if len(ids) > 0 else []
这将解决当前的问题。请仔细阅读课程资料或教程,以了解各种技巧。举例来说,您的词组ids if []
并没有做您(当前)似乎在想的事情:它不会对空列表进行{em> not 检查ids
-所做的只是看空列表是否“真实”,并且空列表的计算结果为False
。
答案 2 :(得分:0)
您收到错误消息是因为,如果列表为空,则您将无法选择最后一个项目,它会正确地抛出IndexError
。
尝试这个例子
ids = [[i for i in range(10)] for x in range(3)]
ids.append([])
last_if_not_empty = [i[-1] for i in ids if i]
在这里,通过if i
过滤掉非空列表,这是选择非空列表的条件。从那里可以选择列表的最后一个元素。
答案 3 :(得分:0)
a = list[-1] if not len(list)==0 else 0
答案 4 :(得分:0)
您可以通过下面的表达式检查空列表。
data = []
if data: #this returns False for empty list
print("list is empty")
else:
print("list has elements")
所以你可以做的。
final = data[-1] if data else []
print(final)