2017-10-06 56 views
-1

我名单列表的两个列表:在列表列表中,如何比较具有相同字母表的列表的列表并将这些值附加到新列表中?

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']]] 

对于它列表的每一个名单,我想比较alphabets.If的字母都是常见的追加最高值数到新名单如果字母不是通用的,只需追加。

输出应该是这样的:

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

你尝试过什么和不输出项目必须按正确的顺序显示? – Skycc

+0

否输出不需要按所示顺序。 –

+0

PLZ解释多一点,并正确缩进你的列表有点乱,水平滚动和理解你的发布名单。 – DexJ

回答

0

大量的正确解决这个问题需要缺少的细节。

例如,

  • 在其中为了你追加项目时,字母列表2高?
  • 这是否重要?
  • 你只是想解决这个案例,或者你需要一个适用于任何3d列表的解决方案 ?
  • “如果字母不是共同的,只需追加”......如何?

无论如何,希望这点能指出你的方向是正确的。绝对没有优化,我相信有一个更简单和优雅的递归方式来解决这个问题。但这个想法正在分解,所以你正在比较正确的元素,然后做任何必要的列表追加。

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名单工作,不只是你们两个以上提供!

....和当然干(不像我所做的)在你提出的更好的解决方案。

+0

我删除了列表的列表之一,代码不再工作? –

+0

它返回keyError 4? –

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

如果输入的长度不相等,并且我删除了列表中的所有列表,我就像上面编辑的列表一样,它不起作用? –

0

使用itertools.izip_longest,使用itertools.zip_longest如果正在使用python 3.

tmp从这两个列表中持有zip项目

然后,根据索引1对列表进行排序,然后按索引0键以相反的顺序排序,使用alphabat的项目将是gr按照从高到低的顺序排列在一起。

然后,我们只取1日最高值项,而忽略低价值物品

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']]] 
相关问题