如何在python中扩展没有空项的列表
我使用如下查询集扩展列表:如何在python中扩展没有空项的列表,python,django,list,Python,Django,List,我使用如下查询集扩展列表: a_objs = MyModelOne.objects.filter(name__icontains=term) b_objs = MyModelTwo.objects.filter(name__icontains=term) l = [] l.extend( (list(a_objs), list(b_objs)) ) 但是由于a_objs是空的,所以我得到了一个列表列表:[[],[]] 我怎样才能以一种冷静的方式避免这些空列表呢?:) 要过滤掉错误(如空列表
a_objs = MyModelOne.objects.filter(name__icontains=term)
b_objs = MyModelTwo.objects.filter(name__icontains=term)
l = []
l.extend( (list(a_objs), list(b_objs)) )
但是由于a_objs
是空的,所以我得到了一个列表列表:[[],[]]
我怎样才能以一种冷静的方式避免这些空列表呢?:) 要过滤掉错误(如空列表),no\u falsies=filter(None,To\u filter)
要过滤掉错误(如空列表),no\u falsies=filter(None,To\u filter)
你真的需要列表吗?为什么不使用源列表的结果扩展目标列表呢?如果您尝试添加一个空列表,这将不会产生任何副作用
a_objs = []
b_objs = ['hello', 'world']
l = []
l.extend(a_objs)
l.extend(b_objs)
print l
你真的需要列表吗?为什么不使用源列表的结果扩展目标列表呢?如果您尝试添加一个空列表,这将不会产生任何副作用
a_objs = []
b_objs = ['hello', 'world']
l = []
l.extend(a_objs)
l.extend(b_objs)
print l
list.extend
只接受一个参数,该参数作为2元组提供。这本身就被列入了一个名单,所以这是你的问题
>>> l = []
>>> l.extend((list(''), list('def')))
>>> l
[[], ['d', 'e', 'f']]
现在,如果您想将多个列表连接在一起,您可以使用itertools.chain
来完成这项工作
>>> list(itertools.chain(list(''), list('def')))
['d', 'e', 'f']
list.extend
只接受一个参数,该参数作为2元组提供。这本身就被列入了一个名单,所以这是你的问题
>>> l = []
>>> l.extend((list(''), list('def')))
>>> l
[[], ['d', 'e', 'f']]
现在,如果您想将多个列表连接在一起,您可以使用itertools.chain
来完成这项工作
>>> list(itertools.chain(list(''), list('def')))
['d', 'e', 'f']
首先,您用一个空列表覆盖列表类型。他想说的是,您不应该使用“list”作为名称,因为它是内置类型。@JayanthKoushik噢,谢谢您的提示。首先,你用一个空列表覆盖列表类型。他想说的是,你不应该使用“列表”作为名称,因为它是内置类型。@JayanthKoushik噢,谢谢你的提示。最好首先避免在列表中添加“Falsie”,而不是在以后添加和删除它们。同意。不过,这仍然是一个有效的选择。我发现它非常清晰/具有人类可读的价值。@Yuji'Tomita'Tomita是的,这是非常好和清晰的。谢谢,曼妮,最好不要在一开始就把“谎言”添加到列表中,而不要在以后再添加和删除它们。同意。不过,这仍然是一个有效的选择。我发现它非常清晰/具有人类可读的价值。@Yuji'Tomita'Tomita是的,这是非常好和清晰的。感谢使用
l
作为变量名通常也被认为是不好的做法,因为它很容易与I
或1
(我在这里违反了这一点),但比重写内置类型要好得多。最好使名称尽可能显式。@metatoaster,是的,我在这篇文章中这样做是为了让它更清楚。在我的真实代码中,它是res\u list
:)使用l
作为变量名通常也被认为是不好的做法,因为它很容易与I
或1
(我在这里违反了这一点),但比重写内置类型要好得多。最好使名称尽可能显式。@metatoaster,是的,我在这篇文章中这样做是为了弄清楚。在我的真实代码中,它是res\u list
:)