我正在使用这样的查询集扩展列表:
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
为空,我会收到一份列表清单:[ [], [<MyModelOne: blabla>] ]
我怎么能以一种很酷的方式避免那些空列表呢? :)
答案 0 :(得分:2)
你真的需要一份清单清单吗?为什么不直接使用源列表中的结果扩展目标列表,如果您尝试添加空列表,则不会产生任何副作用。
a_objs = []
b_objs = ['hello', 'world']
l = []
l.extend(a_objs)
l.extend(b_objs)
print l
答案 1 :(得分:2)
my_list.extend(y for y in (list(x) for x in (a_objs, b_objs)) if y)
答案 2 :(得分:1)
过滤掉虚假(例如空列表),no_falsies = filter(None, to_filter)
l = filter(None, l)
答案 3 :(得分:1)
list.extend
只接受一个参数,你提供一个2元组。这本身就被列入了一个列表,这就是你的问题。
>>> l = []
>>> l.extend((list(''), list('def')))
>>> l
[[], ['d', 'e', 'f']]
现在,如果您想要将多个列表合并在一起,可以使用itertools.chain
来为您执行此操作。
>>> list(itertools.chain(list(''), list('def')))
['d', 'e', 'f']