我有这样的代码:
if list1:
merged += list1
list1 = []
elif list2:
merged += list2
list2 = []
所以我将一个列表附加到另一个列表然后将其清空。 有什么方法可以写出部分内容:
merged += list1
list1 = []
使用函数等在一行上更短更快(更高效)?
答案 0 :(得分:4)
您可以将作业放在一行:
if list1:
merged, list1 = merged + list1, []
elif list2:
merged, list2 = merged + list2, []
您也可以在一行中选择源列表:
source = list1 or list2 or []
merged, source[:] = merged + source, []
如果其中任何一个通过切片分配都有元素,则会更新list1
或list2
。
演示:
>>> def demo(list1, list2, merged):
... source = list1 or list2 or []
... merged, source[:] = merged + source, []
... return list1, list2, merged
...
>>> demo([], [], [1, 2])
([], [], [1, 2])
>>> demo([3, 4], [], [1, 2])
([], [], [1, 2, 3, 4])
>>> demo([3, 4], [5, 6], [1, 2])
([], [5, 6], [1, 2, 3, 4])
>>> demo([], [5, 6], [1, 2])
([], [], [1, 2, 5, 6])
那就是说,我认为你应该坚持原来的版本。效率更高(.extend()
或+=
list
扩展现有list
对象,上述代码始终构建一个全新的对象,即使list1
并且list2
都是空的,并且清晰简单,更具可读性。很高兴我们不时地展示我们的Python fu,但实际上这可能不是这个地方。 : - )