下面的非工作代码
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 :(得分: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