找到2列表不同的索引

时间:2012-11-20 11:44:27

标签: python list

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

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不同的元素包含在<>中,例如。 <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 12000output[0][1] =[1,2]对应<number> <number>

4 个答案:

答案 0 :(得分:1)

尝试

[k for k, v in enumerate(zip(a,b)) if not v[0] == v[1]]

答案 1 :(得分: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()

答案 2 :(得分:0)

以下应该工作。

lista="abcd"
listb="accd"
print [ i for i in xrange(min(len(lista),len(listb))) if lista[i] != listb[i] ]

答案 3 :(得分: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