在Python多维列表中查找匹配项

在Python多维列表中查找匹配项,python,multidimensional-array,Python,Multidimensional Array,我快发疯了,我还有最后期限。我有一个python中的多维列表: list_a = [[['a', 'b'],['c', 'd'], ['e', 'CB'], ['g', 'h'], ['a', 'j', 'k']]] 请注意,整个内容都在两个括号中。 我需要比较这样的元素:a到c,a到d,b到c,b到d,a到e,a到CB…直到第一个列表将它的所有项与其他列表中的所有项进行了比较,然后它移动到第二个列表,并开始将其项与其余列表进行比较,依此类推,直到最后。我不希望它将自己的项目与自己的列表进行比

我快发疯了,我还有最后期限。我有一个python中的多维列表:

list_a = [[['a', 'b'],['c', 'd'], ['e', 'CB'], ['g', 'h'], ['a', 'j', 'k']]]
请注意,整个内容都在两个括号中。 我需要比较这样的元素:a到c,a到d,b到c,b到d,a到e,a到CB…直到第一个列表将它的所有项与其他列表中的所有项进行了比较,然后它移动到第二个列表,并开始将其项与其余列表进行比较,依此类推,直到最后。我不希望它将自己的项目与自己的列表进行比较。 下面是一些代码:

for i in range(0, len(list_a)):
  for j in range(0, len(list_a)):
    for o in range (0, len(list_a[i])):
        for t in range(1, len(list_a[j])):
            try:
                for x in range(0, len(list_a[i][o])):
                    for y in range(0, len(list_a[j][t])):
                        print list_a[i][o][x], "i=",i, "o=",o, "x=",x
                        print list_a[j][t][y], "j=",j, "t=",t, "y=",y
            except IndexError:
                print ""
此项失败,因为它将自己的项与自己的项进行比较。当然,有更好的方法来实现这一点,而不是在彼此之间放置大量forloop


而且,当它遇到CB时,我需要它向我发出信号。如果它循环正确,这将很容易。哦,我想那边的“尝试”可以去掉。我相信这很简单,但我现在还没弄清楚。

您可以使用itertools从列表中获取所有对,然后查找它们的所有产品:

import itertools
for l1, l2 in itertools.combinations(list_a[0], 2):
    for e1, e2 in itertools.product(l1, l2):
        print e1, e2
印刷品:

a c
a d
b c
b d
a e
a CB
b e
b CB
a g
a h
b g
b h
a a
a j
a k
b a
b j
b k
c e
c CB
d e
d CB
c g
c h
d g
d h
c a
c j
c k
d a
d j
d k
e g
e h
CB g
CB h
e a
e j
e k
CB a
CB j
CB k
g a
g j
g k
h a
h j
h k
你写的

for o in range (0, len(list_a[i])):
     for t in range(1, len(list_a[j])):
t
范围(1,…)
o为0时正确。但是当o为1,2,3时。。。然后t必须在
范围内(o+1,…)
但仅当
i==j

我认为在您的示例中只有一个元素['a',b'],…['a',j',k']]来限制执行和显示的时间,我认为实际上还有其他元素。所以我使用第二个列表作为元素进行测试,假设您希望进行哪种比较。因此,我观察了一些索引问题,您将在下面的代码中看到采用的解决方案

我还改变了显示器,以便更容易地分析过程。请注意“技巧”,包括在列表ecr中进行追加,并在末尾显示此列表的内容。因此,显示是瞬时的,而不是一行接一行的长显示

list_a = [[['a', 'b'],['c', 'd'], ['e', 'CB'], ['g', 'h'], ['a', 'j', 'k']],
          [['l', 'm'],['b', 'n'], ['q', 'r'], ['CB', 'c', 'n']]]


ecr = []
for i in xrange(0, len(list_a)):
    for j in xrange(i, len(list_a)):
        ecr.append('XXXXXXXXXXXXXXXXXXX i,j='+str(i)+','+str(j))
        for o in xrange (0, len(list_a[i])-(1 if i==j else 0)):
            ecr.append('================= o='+str(o)+'  < '+str(len(list_a[i])-(1 if i==j else 0)))
            for t in xrange(o+1 if i==j else 0, len(list_a[j])):
                ecr.append('------------- o,t='+str(o)+','+str(t))
                try:
                    for x in xrange(0, len(list_a[i][o])):
                        ecr.append('~~~~~~~ x='+str(x))
                        for y in xrange(0, len(list_a[j][t])):
                            ecr.append("i,j="+str(i)+ ","+str(j)+'\n'+\
                                       list_a[i][o][x]+ "  o="+str(o)+ "  x="+str(x)+'\n'+\
                                       list_a[j][t][y]+ "  t="+str(t)+ "  y="+str(y)+'\n'+\
                                         ' ')
                except IndexError:
                    ecr.append( "FAIL")


print '\n'.join(ecr)
list_a=[[['a',b'],['c',d'],['e','CB'],['g','h'],['a','j','k'],
[l'、[m']、[b'、[n']、[q'、[r']、[CB'、[c'、[n']]
ecr=[]
对于x范围内的i(0,len(列表_a)):
对于x范围内的j(i,len(列表_a)):
ecr.append('xxxxxxxxxxxxxxxxxxxxxi,j='+str(i)+','+str(j))
对于x范围内的o(0,len(列表_a[i])-(如果i==j,则为1,否则为0)):
ecr.append('===================o='+str(o)+'<'+str(len(list_a[i])-(如果i==j,则为1,否则为0)))
对于x范围内的t(如果i==j,则为o+1,否则为0,len(列表a[j]):
ecr.append('-----------o,t='+str(o)+','+str(t))
尝试:
对于x范围内的x(0,len(列表a[i][o]):
ecr.append('~~~~~~~~x='+str(x))
对于x范围内的y(0,len(列表a[j][t]):
ecr.append(“i,j=“+str(i)+”,“+str(j)+'\n”+\
列表_a[i][o][x]+“o=“+str(o)+”x=“+str(x)+'\n”+\
列表_a[j][t][y]+“t=“+str(t)+”y=“+str(y)+'\n”+\
' ')
除索引器外:
ecr.追加(“失败”)
打印“\n”。加入(ecr)

此代码是否符合您的目标?

我看不到任何可以描述为比较的东西。你想达到什么目标?另外,虽然您注意到列表的双重嵌套,但没有解释为什么会出现这种情况。比较的部分是在某个地方添加if语句,这很简单。现在我只是将它们全部打印出来,看看当前选择了哪些元素。Rmitteleitav Python中唯一的数组是以下数组:()您所谓的数组实际上是事实列表。这一个为我做的。我有一个线索,它必须与迭代器完成。无论如何,谢谢。
>>> list_a = [[['a', 'b'], ['c', 'd'], ['e', 'CB'], ['g', 'h'], ['a', 'j', 'k']]]

>>> k = list_a[0]

>>> c = [(a,b) for b in k for a in k if a!=b] # cartesian excluding self==self

>>> u = [(d,b) for a,b in c for d in a] # unique key, list of values

>>> f = [(a,d) for a,b in u for d in b] # final results (key,value)

>>> print "\n".join(sorted(["%s %s" % x for x in f]))
CB a
CB a
CB b
CB c
CB d
CB g
CB h
CB j
CB k
a CB
a CB
a a
a a
a b
a c
a c
a d
a d
a e
a e
a g
a g
a h
a h
a j
a k
b CB
b a
b c
b d
b e
b g
b h
b j
b k
c CB
c a
c a
c b
c e
c g
c h
c j
c k
d CB
d a
d a
d b
d e
d g
d h
d j
d k
e a
e a
e b
e c
e d
e g
e h
e j
e k
g CB
g a
g a
g b
g c
g d
g e
g j
g k
h CB
h a
h a
h b
h c
h d
h e
h j
h k
j CB
j a
j b
j c
j d
j e
j g
j h
k CB
k a
k b
k c
k d
k e
k g
k h