2011-03-14 99 views
0
  • 列表的两个列表h & i。
  • h [0]的长度等于h [1]并且等于h [2]。同样适用于我[0],我[1]和我[2]。
  • h [0]的长度可能不等于i [0]。
  • 当h [0] [x] = i [0] [y]时,“比较”h [2] [x] & i [2] [y]。
  • 功能 “比较” 指的是下述:
    1. 分割了x & Y考虑列表遇到 '\ n' 与x.split( '\ n')和y.split时( '\ n') 。
    2. 对于x.split('\ n')和y.split('\ n')的每个元素,使用list_difference删除重复项。
    3. 将结果存储到新的列表结果中。

非工作如下当不同元素匹配时删除列表中的重复元素 - Python

def list_difference(list1, list2): 
    """Uses list1 as the reference, returns list of items not in list2.""" 
    diff_list = [] 
    for item in list1: 
     if not item in list2: 
      diff_list.append(item) 
    return diff_list 


h=[['match','meh'],['0','1'],['remove\n0\n12','1']] 
i=[['match','ignore0','ignore1'],['0','2','3'],['1\nremove','2','3']] 
result = result(h,i) 

# result should be: 
# result = [['match','meh'],['0','1'],['0','1']] 

# code not working: 
results = [] 
for l in h: 
    for p in i: 
     if l[0] == p[0]: 
      results.append(list_difference(l[2].split('\n'), p[2].split('\n'))) 

# Traceback (most recent call last): 
# File "<pyshell#19>", line 4, in <module> 
#  results.append(list_difference(l[2].split('\n'), p[2].split('\n'))) 
# IndexError: list index out of range 

代码越来越近:

for l0, l2 in h[0], h[2]: 
    for p0, p2 in i[0], i[2]: 
     if l0 == p0: 
      results.append(list_difference(l2.split('\n'), p2.split('\n'))) 
print results 
# [['h0_1']] 

回答

0

这工作,但可能不是最有效或Python的代码。

import string 
def list_difference(list1, list2): 
    """Uses list1 as the reference, returns list of items not in list2.""" 
    diff_list = [] 
    for item in list1: 
     if not item in list2: 
      diff_list.append(item) 
    return diff_list 

def list_in_list_newline_diff(h, i): 
    """When h[0] equals i[0], diffs h[2] against i[2], returns diff'd h.""" 
    new_h = [[],[],[]] 
    hh = zip(h[0], h[1], h[2]) 
    ii = zip(i[0], i[1], i[2]) 
    for hi, hd, hr in hh: 
     # print 'host %s\n%s' % (hi, hr.split('\n')) 
     for pi, pd, pr in ii: 
       if hi == pi: 
       #print 'prev %s\n%s' % (pi, pr.split('\n')) 
        hr = string.join(list_difference(hr.split('\n'), pr.split('\n')), sep='\n') 
     if hr == '': 
      continue 
     new_h[0].append(hi) 
     new_h[1].append(hd) 
     new_h[2].append(hr) 
    return new_h