我有两个列表清单:
A=[[[0, 'a'], [2, 'g'], [9, 'Q']], [[2, 'a'], [0, 'c'], [0, 'g'], [15, 'w'], [2, 'Q']], [[15, 'g'], [0, 'w'], [7, 'Q']], [[9, 'a'], [0, 'c'], [2, 'g'], [7, 'w'], [0, 'Q']]]
B[[[0, 'a'], [0, 'Q'], [12, 'front'], [0, 'Z']], [[1, 'a'], [2, 'c'], [0, 'w'], [0, 'Q'], [2, 'front'], [0, 'Z']], [[0, 'Q'], [3, 'front'], [5, 'Z']], [[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'front'], [2, 'Z']], [[0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q'], [2, 'front'], [0, 'Z']]]
对于其中的每个列表列表,我想比较字母表。如果字母表是共同的,则将具有最高值编号的列表附加到新列表中。如果字母表不相同,则只需附加。
输出应该是:
C=[[[0, 'a'],[2,'g'], [9, 'Q'], [12, 'front'], [0, 'Z']], [[1, 'a'],[[0,'g'], [2, 'c'], [0, 'w'], [0, 'Q'], [2, 'front'], [0, 'Z']],....
答案 0 :(得分:0)
正确解决此问题需要大量缺失的细节。
例如,
无论如何,希望这能指出你正确的方向。绝对没有优化,我敢肯定有一个更简单和优雅的递归方式来解决这个问题。但是这个想法是打破它,所以你要比较正确的元素,然后做任何必要的列表追加。
a = [[[0, 'a'], [2, 'g'], [9, 'Q']], [[0, 'c'], [0, 'g'], [0, 'Q']], [[2, 'a'], [0, 'c'], [0, 'g'], [15, 'w'], [2, 'Q']], [[15, 'g'], [0, 'w'], [7, 'Q']], [[9, 'a'], [0, 'c'], [2, 'g'], [7, 'w'], [0, 'Q']]]
b = [[[0, 'a'], [0, 'Q'], [12, 'front'], [0, 'Z']], [[1, 'a'], [2, 'c'], [0, 'w'], [0, 'Q'], [2, 'front'], [0, 'Z']], [[0, 'Q'], [3, 'front'], [5, 'Z']], [[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'front'], [2, 'Z']], [[0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q'], [2, 'front'], [0, 'Z']]]
group_a = {}
group_b = {}
count = 0
for x in a:
group_a[count] = []
for y in x:
group_a[count].append(y)
count+=1
count = 0
for x in b:
group_b[count] = []
for y in x:
group_b[count].append(y)
count+=1
new_list = []
for x in range(len(group_b)):
first = group_a[x]
second = group_b[x]
for y in first:
for z in second:
if y[1] == z[1]:
if y[0] > z[0]:
break
else:
y[0] = z[0]
for y in second:
add = True
for z in first:
if y[1] == z[1]:
add = False
if add:
first.append(y)
new_list.append(first)
print(new_list)
希望这有助于您找到适用于所有3D列表的漂亮递归解决方案,而不仅仅是您在上面提供的两个!
....当然还有DRY(与我的不同)在你提出的更好的解决方案中。
答案 1 :(得分:0)
忽略输出嵌套列表元素的顺序并假设输入列表的长度相等:
A=[[[0, 'a'], [2, 'g'], [9, 'Q']], [[0, 'c'], [0, 'g'], [0, 'Q']], [[2, 'a'], [0, 'c'], [0, 'g'], [15, 'w'], [2, 'Q']], [[15, 'g'], [0, 'w'], [7, 'Q']], [[9, 'a'], [0, 'c'], [2, 'g'], [7, 'w'], [0, 'Q']]]
B=[[[0, 'a'], [0, 'Q'], [12, 'front'], [0, 'Z']], [[1, 'a'], [2, 'c'], [0, 'w'], [0, 'Q'], [2, 'front'], [0, 'Z']], [[0, 'Q'], [3, 'front'], [5, 'Z']], [[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'front'], [2, 'Z']], [[0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q'], [2, 'front'], [0, 'Z']]]
C=[]
for index in range(len(A)):
list_a = A[index]
list_b = B[index]
if len(list_a) > len(list_b):
loop_list=list_a
comp_list=list_b
else:
loop_list=list_b
comp_list=list_a
temp=[]
found_list=[]
for each_sub_list in loop_list:
number = each_sub_list[0]
alphabet = each_sub_list[1]
found=0
for index_b,each_sub_list_b in enumerate(comp_list):
if alphabet == each_sub_list_b[1]:
found=index_b
found_list.append(comp_list[index_b])
break
if found:
if number > comp_list[found][0]:
temp.append(each_sub_list)
else:
temp.append(comp_list[found])
else:
temp.append(each_sub_list)
never_found_list = [item for item in comp_list if item not in found_list]
temp.extend(never_found_list)
C.append(temp)
print(C)
答案 2 :(得分:0)
使用itertools.izip_longest处理不同的输入列表长度,如果您使用的是python 3,请使用itertools.zip_longest。
tmp
持有两个列表中的zip项目
然后,按照索引1对列表进行排序,然后按索引0键反向排序,带alphabat的项目按值从高到低依次组合在一起。
然后,我们只取第一个最高值项并忽略较低值项
A=[[[0, 'a'], [2, 'g'], [9, 'Q']], [[2, 'a'], [0, 'c'], [0, 'g'], [15, 'w'], [2, 'Q']], [[15, 'g'], [0, 'w'], [7, 'Q']], [[9, 'a'], [0, 'c'], [2, 'g'], [7, 'w'], [0, 'Q']]]
B=[[[0, 'a'], [0, 'Q'], [12, 'front'], [0, 'Z']], [[1, 'a'], [2, 'c'], [0, 'w'], [0, 'Q'], [2, 'front'], [0, 'Z']], [[0, 'Q'], [3, 'front'], [5, 'Z']], [[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'front'], [2, 'Z']], [[0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q'], [2, 'front'], [0, 'Z']]]
C = []
for a,b in itertools.izip_longest(A,B):
tmp = []
mem = set()
if a:
tmp.extend(a)
if b:
tmp.extend(b)
sorted_list = sorted(tmp, key=lambda x:(x[1],x[0]), reverse=True)
inner_out = []
for i in sorted_list:
if i[1] not in mem:
inner_out.append(i)
mem.add(i[1])
C.append(inner_out)
# C = [[[2, 'g'], [12, 'front'], [0, 'a'], [0, 'Z'], [9, 'Q']], [[15, 'w'], [0, 'g'], [2, 'front'], [2, 'c'], [2, 'a'], [0, 'Z'], [2, 'Q']], [[0, 'w'], [15, 'g'], [3, 'front'], [5, 'Z'], [7, 'Q']], [[7, 'w'], [2, 'g'], [0, 'front'], [0, 'c'], [12, 'a'], [2, 'Z'], [3, 'Q']], [[0, 'w'], [2, 'front'], [0, 'c'], [0, 'a'], [0, 'Z'], [5, 'Q']]]