Python进行数组合并的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python进行数组合并的方法相关的知识,希望对你有一定的参考价值。

参考技术A

python的数组合并在算法题中用到特别多,这里简单总结一下:

假设有a1和a2两个数组:

a1=[1,2,3]

a2=[4,5,6]

1. 直接相加

合并后赋值给新数组a3
a3 = a1 + a2

2. extend

调用此方法,a1会扩展成a1和a2的内容 a1.extend(a2)

3. 列表表达式

先生成新的二维数组) a3 = [a1, a2])
列表推导形成新的数组) a4 = [ y for a in a3 for y in a ])

下面分别测试下三种数组合并方式的性能

分别输出:

17.2916171551

20.8185400963

55.1758739948

可以看出:在数据量大的时候,第一种方式的性能要高出很多。

python3实现合并两个有序数组

  很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始。今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲笑菜鸡。

88/809 合并两个有序数组
 

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 使得 num1 成为一个有序数组。

说明:

  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n
  • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

我采用的方法:
class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        del(nums1[m:])
        del(nums2[n:])
        nums1.extend(nums2)
        nums1.sort(reverse=False)

思路很简单,就是删除nums1中第m个(从1开始)元素后面的元素,删除nums2后面第n个元素后面的元素,再用num2列表扩展nums1列表,最后再对所有元素进行升序排序。

用时最短的方法:

class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        for num in nums2:
            nums1[m] = num
            m += 1
        nums1.sort()
        

他的思路是把nums2的元素放到nums1第m个(从0开始)数的后面。好奇他为什么没有用到n这个值,感觉好像错了,用官网测试了他的算法竟然结果也是对的,太奇怪了。

 

以上是关于Python进行数组合并的方法的主要内容,如果未能解决你的问题,请参考以下文章

js利用Map对两个数组对象进行合并去重

Java数组合并方法学习。

python3实现合并两个有序数组

python 中两个数组如何合并为一个数组。

JAVA中的数组合并问题

追加/合并二维数组