Python练习题

1.将一个列表中字典字段相同的元素合并并且值相加

'''
将一个列表中字典字段相同的元素合并并且值相加
如下两个列表,需要将oldList转化为newList,去掉相同字段的字典,并且去掉的参数里面的值要相加

oldList = [{'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1972},
           {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0},
           {'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1450},
           {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0},
           {'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1334}]
newList = [{'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 4756},
           {'3-3': 406, '3-2': 0, '3-1': 0, '3-0': 0}]

'''
def merge(oldlist):
    newlist=[]
    newlist.append(oldlist[0])
    for i in range(1,len(oldlist)):     #遍历oldlist
        old_item = oldlist[i]
        old_key =old_item.keys()
        flag = False
        for j in range(0,len(newlist)):  #遍历newlist
            new_item=newlist[j]
            if(old_key == new_item.keys()):    #判断newlist中字典键是否已经出现过
                flag = True
                for key in old_key:
                    newlist[j][key] +=old_item[key]
                break
        if not flag:                          #判断newlist中是否存在oldlist中字典键,不存在添加
            newlist.append(old_item)
    print(newlist)


oldList = [{'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1972},
           {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0},
           {'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1450},
           {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0},
           {'0-0': 0, '0-1': 0, '0-2': 0, '0-3': 1334}]
merge(oldList)


2.合并两个有序数组

'''
给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。
初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1的空间大小等于m+n,
这样它就有足够的空间保存来自num2的元素。
示例:
输入:nums1 = [1,2,3,0,0,0], m=3, nums2=[2,5,6],n=2
输出:nums1=[1,2,2,3,5,6]
'''
class Solution():
    def merge(self, nums1, m, nums2, n):
        p1, p2 = m - 1, n - 1            #确定索引上限
        pos = m + n - 1      
        while p1 >= 0 and p2 >= 0:
            if nums1[p1] >= nums2[p2]:
                nums1[pos] = nums1[p1]
                p1 -= 1                  #由于nums1中最大值比nums2中最大值大,故放在最后
            else:
                nums1[pos] = nums2[p2]   #由于nums2中最大值比nums1中最大值大,故放在最后
                p2 -= 1
            pos -= 1
        while p2 >= 0:                  #当存在nums2没有全部移完时,需要继续放完
            nums1[pos] = nums2[p2]
            p2 -= 1
            pos -= 1
        return nums1

s = Solution()
print(s.merge([2, 5, 7, 0, 0, 0], 3, [2, 5, 6], 3))
# print(s.merge([1],1,[],0))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习_程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值