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))