任务要求
给定一个数组nums和目标值target。将target元素移动到数组前面,其他元素相对顺序不变,得到新的数组。
任务分析
需要将数组中的所有目标值移动到前面,同时保持其他元素的相对顺序不变。以下是几种常见的实现方法:
1.构造新列表:遍历原数组,分别收集目标值和其他元素,最后拼接两个列表。
2.列表推导式:使用列表推导式分别提取目标值和其他元素,然后拼接。
3.内置函数:利用Python的内置函数filter或sorted来实现。
任务实现
方法二:构造新列表。遍历原数组,分别收集目标值和其他元素,最后拼接两个列表。
def move_target_to_front_new_list(nums, target): # 构造新列表 targets = [] others = [] for num in nums: if num == target: targets.append(num) else: others.append(num) return targets + othersoriginal_nums = [1, 2, 3, 2, 4, 5, 2]target_value = 2result = move_target_to_front_new_list(original_nums, target_value)print("构造新列表结果:", result)
运行结果:
构造新列表结果: [2, 2, 2, 1, 3, 4, 5]
进程已结束,退出代码为 0
targets列表用存储所有等于target的元素。others列表用于存储其他元素。最后将targets列表和others列表拼接,得到结果。
方法二:列表推导式。使用列表推导式分别提取目标值和其他元素,然后拼接。
def move_target_to_front_list_comprehension(nums, target): # 列表推导式 targets = [x for x in nums if x == target] others = [x for x in nums if x != target] return targets + othersoriginal_nums = [1, 2, 3, 2, 4, 5, 2]target_value = 2result = move_target_to_front_list_comprehension(original_nums, target_value)print("列表推导式结果:", result)
运行结果:
列表推导式结果: [2, 2, 2, 1, 3, 4, 5]
进程已结束,退出代码为 0
targets列表保存使用列表推导式提取所有等于target的元素。others列表保存使用列表推导式提取其他元素。最后将targets列表和others列表拼接,得到结果。
方法三:内置函数。利用Python的内置函数filter来实现。
def move_target_to_front_filter(nums, target): # 使用内置函数filter targets = list(filter(lambda x: x == target, nums)) others = list(filter(lambda x: x != target, nums)) return targets + othersoriginal_nums = [1, 2, 3, 2, 4, 5, 2]target_value = 2result = move_target_to_front_filter(original_nums, target_value)print("内置函数filter结果:", result)
运行结果:
内置函数filter结果: [2, 2, 2, 1, 3, 4, 5]
进程已结束,退出代码为 0
targets列表保存使用filter函数和lambda表达式提取所有等于target的元素。others列表保存使用filter函数和lambda表达式提取其他元素。最后将targets列表和others列表拼接,得到结果。
总结
本文介绍了三种使用Python将数组中目标值移动到前面的方法:
1.构造新列表:直观且易于理解。
2.列表推导式:代码简洁。
3.内置函数:利用Python的内置功能,代码简洁。