-2

私は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 は入力リストで、出力は結果リストです。a と異なる b の要素は<>、たとえば for で囲まれています。<blabla> ケース 1 とケース 2 では、 のoutput[i][0]インデックスと のインデックスをa示しoutput[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

これにより、指定された 2 つのケースで要求された出力が得られます。

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 に答える
1

試す

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

Following should work.

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 に答える