def combine_lists(lt1, lt2):
if lt1[0] and lt2[0]:
lt = [lt1, lt2]
elif lt1[0] and not lt2[0]:
lt = [lt1]
elif not lt1[0] and lt2[0]:
lt = [lt2]
elif not lt1[0] and not lt2[0]:
lt = [None, None]
return lt
上述功能将2个列表合并为一个列表。例如。 lt1
可能与['a', 'b']
最简单的方法是将它从2个输入参数扩展到任意数量的列表作为输入。输出仍应是列表列表
- 编辑
lt1 = [1,2,3],lt2 = [4,5,6]的预期答案应为[[1,2,3],[4,5,6]]
答案 0 :(得分:6)
如果我理解你的问题,你想要这样的事情:
class Post(models.Model):
uploaded_by = models.ForeignKey('auth.User',default=1,related_name='uploads')
...
因此,我们正在使用>>> def combine(*args):
... return list(args)
...
>>> print combine([1,2,3], ['a','b','c'], [True, False])
[[1, 2, 3], ['a', 'b', 'c'], [True, False]]
中的positional arguments(存储在args
中)并将其转换为列表。它适用于任何数量的参数,并且它会愉快地将任何内容(不仅仅是列表)组合到一个列表中。
答案 1 :(得分:3)
您可以在此处使用列表推导,并使用*args
让它适用于任意个参数:
def combine_lists(*args):
return [lt if lt[0] else None for lt in args]
代码的工作原理如下,通过使用list comprehesion,我们将迭代args
,这是一个未命名参数的元组,其中combine_lists
被调用。对于每个列表lt
,我们会检查if lt[0]
是否属于这种情况,然后我们会将lt
添加到列表中,否则我们会添加None
。
请注意,此程序可以引发错误:如果其中一个lt
无法编入索引,或没有元素index 0 。所以这是非常不安全的。
你可以 - 通过轻微改变语义 - 防止这种情况发生:如果我们正在处理一个空列表,那么我们在下面的例子中添加该列表:
def combine_lists(*args):
return [lt if not lt or lt[0] else None for lt in args]
如果所有对象都是列表,元组等,这将起作用。
答案 2 :(得分:1)
您可以将map()
与多个参数*args
一起使用,并返回map object
,如下例所示:
def combine_list(*args):
return map(list, args)
final = list(combine(['a','b'], ['c', 'd'], ['e', 'f']))
print(final)
输出:
[['a', 'b'], ['c', 'd'], ['e', 'f']]
答案 3 :(得分:1)
def combine_lists(lt1, lt2):
lt = []
lt.append(lt1)
lt.append(lt2)
return lt
你可以这样做。它将为您提供您拥有的两个列表的列表。