-2

我有两个清单。我必须找到这些列表不同的索引。

case 1: 
a = "node1 ip up ether 40  46 server low".split()
b = "node1 ip <down> ether <number(s)> server <status>".split()
output = [ [[2],[2]], 
           [[4,5],[4]],
           [[7],[6]]  ]

case 2:
a = ' label 0 12000 '.split()
b = ' label  <number>  <number>'.split()
output = [ [[1,2],[1,2]] ]

a,b 是输入列表,输出是结果列表。b 中与 a 不同的元素都包含在<>for 中。<blabla> 在案例 1 和案例 2 中,output[i][0]给出 的索引aoutput[i][1]给出 的索引b

  1. 在案例 1 中,up<down>位置 不同[2,2]40, 46<number(s)>在位置[4,5],[4]等方面有所不同。
  2. 在情况 2 中,output[0][0] = [1,2]对应于0 12000并且output[0][1] =[1,2]对应于<number> <number>
4

4 回答 4

1

尝试

[k for k, v in enumerate(zip(a,b)) if not v[0] == v[1]]
于 2012-11-20T11:51:59.977 回答
1

这给出了给定两种情况的请求输出。

import difflib

def diff_indices(a, b):
    sm = difflib.SequenceMatcher(a=a, b=b)
    res = []
    for tag, i1, i2, j1, j2 in sm.get_opcodes():
        if tag == 'replace':
            res.append([range(i1,i2), range(j1,j2)])
    return res

print diff_indices(
    a="node1 ip up ether 40  46 server low".split(),
    b="node1 ip <down> ether <number(s)> server <status>".split())
#[[[2], [2]], [[4, 5], [4]], [[7], [6]]]
print diff_indices(
    a=' label 0 12000 '.split(),
    b=' label  <number>  <number>'.split())
#[[[1, 2], [1, 2]]]

目前尚不清楚您在这种情况下的期望是什么:

a = "node1 ip up ether 40  46 server low".split()
b = "node1 ip <down> ether server <status>".split()
于 2012-11-20T13:00:00.927 回答
0

以下应该工作。

lista="abcd"
listb="accd"
print [ i for i in xrange(min(len(lista),len(listb))) if lista[i] != listb[i] ]
于 2012-11-20T12:02:38.243 回答
0
a = "node1 ip up ether 40  46 server low".split()
b = "node1 ip <down> ether <number(s)> server <status>".split()

if len(a) > len(b):
    b,a = a,b

a_it = iter(a)
b_it = iter(b)

diffs = []
a_diff = []
b_diff = []

i = 0
start = 0
while i < len(a):
    j = i
    while j < len(b):
        if a[i] == b[j]:
            if a_diff:
                b_diff = range(start,j)
                diffs.append([a_diff,b_diff])
                a_diff = []
                b_diff = []
            i = i + 1
            start = j + 1
        j = j + 1
    a_diff.append(i)
    i = i + 1


if a_diff:
    b_diff = range(start,j)
    diffs.append([a_diff,b_diff])

print diffs
于 2012-11-21T08:11:39.770 回答