当不同的元素匹配时删除列表的重复元素 - Python

时间:2011-03-14 13:52:48

标签: python list

  • 两个清单列表,h&岛
  • h [0]的长度等于h [1]并等于h [2]。 i [0],i [1]和i [2]也是如此。
  • h [0]的长度可能不等于i [0]。
  • 当h [0] [x] = i [0] [y]时,“比较”h [2] [x]& I [2] [Y]。
  • “比较”功能表示以下内容:
    1. 拆分x&当遇到带有x.split('\ n')和y.split('\ n')的'\ n'时,列表进入列表。
    2. 对于x.split('\ n')和y.split('\ n')的每个元素,删除带有list_difference的重复项。
    3. 将结果存储在新列表结果中。

下面的非工作代码

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

1 个答案:

答案 0 :(得分:0)

这可行,但可能不是最有效或pythonic代码。

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