If else填充变量If为空列表



我的列表是空的,并填充在数据中。我正在尝试将列表的最后一个元素存储到一个变量中。如果列表中有元素,则它工作正常。然而,当我传入一个空的[]列表时,我会得到如下错误: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中有一个空列表,我需要它给出[]。如果有元素,那么给出最后一个元素,它正在工作。

这里有一种方法:

final = ids[-1] if ids else None

(当列表为空时,将None替换为您希望final取的值。(

您可以通过下面的表达式检查空列表。

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)
final = ids[-1] if len(ids) > 0 else []

这将解决眼前的问题。请仔细阅读课堂材料或教程,了解更多关于个人技术的信息。例如,你的短语ids if []并没有按照你(目前(的想法:它确实没有对照空列表检查ids——它所做的只是看看这个空列表是否"truthy",而空列表的评估结果是False

您会得到错误,因为如果列表为空,您将无法选择最后一项,并且它将正确地抛出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筛选出非空列表,这是选择非空列表的条件。从那里你可以挑选出列表的最后一个元素。

a = list[-1] if not len(list)==0 else 0

最新更新