首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简化2d列表比较的输出

简化2d列表比较的输出
EN

Stack Overflow用户
提问于 2020-08-28 21:07:12
回答 4查看 76关注 0票数 0

我已经从一个tuples文件复制了大约2000行list。现在,我需要将list中的每个元素与list其余部分中的后续元素进行比较,并且只需要对每个元素进行一次,即,如果我接受第一个元素,并将其与列表中的每个元素进行比较,那么我可以在其余的比较中放弃它。

这是我的比较代码块:

代码语言:javascript
运行
复制
R = [(20, 12, 40, 42, 45), (40, 21, 40, 42, 49),
    (6, 19, 22, 36, 48), (2, 5, 20, 24, 33),
    (8, 12, 24, 28, 44), (3, 15, 29, 30, 37),
    (20, 17, 30, 33, 43), (3, 15, 16, 29, 42),
    (17, 18, 20, 35, 39), (20, 21, 23, 43, 48),
    (14, 24, 30, 40, 45)...]


for lineno1, tup in enumerate(R):
    print("")
    # iterate over the current tuple
    for i, num in enumerate(tup):
        # compare every number in the tuple to the rest of the list
        for lineno2 in range(lineno1+1, len(R)):
            tup2 = R[lineno2]
            if num == tup2[i]:
                print(f"In line: {lineno1+1} {tup} No. '{num} is found in line {lineno2+1} {tup2}.")
                break

我的产出:

代码语言:javascript
运行
复制
line: 1 (20, 12, 40, 42, 45) No. 20 is found in line '7' (20, 17, 30, 33, 43).
    line: 1 (20, 12, 40, 42, 45) No. 12 is found in line '5' (8, 12, 24, 28, 44).
    line: 1 (20, 12, 40, 42, 45) No. 40 is found in line '2' (40, 21, 40, 42, 49).
    line: 1 (20, 12, 40, 42, 45) No. 42 is found in line '2' (40, 21, 40, 42, 49).
    line: 1 (20, 12, 40, 42, 45) No. 45 is found in line '11' (14, 24, 30, 40, 45).
    
    line: 2 (40, 21, 40, 42, 49) No. 21 is found in line '10' (20, 21, 23, 43, 48).
    
    line: 3 (6, 19, 22, 36, 48) No. 48 is found in line '10' (20, 21, 23, 43, 48).
    
    line: 4 (2, 5, 20, 24, 33) No. 20 is found in line '9' (17, 18, 20, 35, 39).
    
    
    line: 6 (3, 15, 29, 30, 37) No. 3 is found in line '8' (3, 15, 16, 29, 42).
    line: 6 (3, 15, 29, 30, 37) No. 15 is found in line '8' (3, 15, 16, 29, 42).
    
    line: 7 (20, 17, 30, 33, 43) No. 20 is found in line '10' (20, 21, 23, 43, 48).
    line: 7 (20, 17, 30, 33, 43) No. 30 is found in line '11' (14, 24, 30, 40, 45).

我需要帮助格式化输出,在我的输出中,我为一个tuple获得了五行输出,我需要简化它并获得一个清晰的输出。我想在一行中得到每一个tuple的输出,因为我有超过1500 tuples,它大约需要7500行。

我想要像这样的输出

代码语言:javascript
运行
复制
Line 1: (20, 12, 40, 42, 45) (7, 5, 2, 2, 11)  #Right side values are  line numbers of the respective element in the tuple
Line 2: (40, 21, 40, 42, 49) (0, 10, 0, 0, 0)
Line 3: (6, 19, 22, 36, 48) (0, 0, 0, 0, 10)
Line 4: (2, 5, 20, 24, 33) (0, 0, 9, 0, 0)
Line 6: (3, 15, 29, 30, 37) (8, 8, 0, 0, 0)
Line 7: (20, 17, 30, 33, 43) (10, 0, 11, 0, 0)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-28 22:05:05

注意,有些行与另一行有多个匹配。我把他们留在家里了。

代码语言:javascript
运行
复制
R = [(20, 12, 40, 42, 45), 
     (40, 21, 40, 42, 49),
     (6, 19, 22, 36, 48), 
     (2, 5, 20, 24, 33),
     (8, 12, 24, 28, 44), 
     (3, 15, 29, 30, 37),
     (20, 17, 30, 33, 43), 
     (3, 15, 16, 29, 42),
     (17, 18, 20, 35, 39), 
     (20, 21, 23, 43, 48),
     (14, 24, 30, 40, 45)]
     
     
for i,x in enumerate(R):
   for ie, e in enumerate(x):
       for rw in range(i+1, len(R)):
          if e == R[rw][ie]:
             print(f"In line: {i+1} {x} No. '{e}' is found in line {rw+1} {R[rw]}")
             break

输出

代码语言:javascript
运行
复制
In line: 0 (20, 12, 40, 42, 45) No. '20' is found in line 6 (20, 17, 30, 33, 43)
In line: 0 (20, 12, 40, 42, 45) No. '12' is found in line 4 (8, 12, 24, 28, 44)
In line: 0 (20, 12, 40, 42, 45) No. '40' is found in line 1 (40, 21, 40, 42, 49)
In line: 0 (20, 12, 40, 42, 45) No. '42' is found in line 1 (40, 21, 40, 42, 49)
In line: 0 (20, 12, 40, 42, 45) No. '45' is found in line 10 (14, 24, 30, 40, 45)
In line: 1 (40, 21, 40, 42, 49) No. '21' is found in line 9 (20, 21, 23, 43, 48)
In line: 2 (6, 19, 22, 36, 48)  No. '48' is found in line 9 (20, 21, 23, 43, 48)
In line: 3 (2, 5, 20, 24, 33)   No. '20' is found in line 8 (17, 18, 20, 35, 39)
In line: 5 (3, 15, 29, 30, 37)  No. '3'  is found in line 7 (3, 15, 16, 29, 42)
In line: 5 (3, 15, 29, 30, 37)  No. '15' is found in line 7 (3, 15, 16, 29, 42)
In line: 6 (20, 17, 30, 33, 43) No. '20' is found in line 9 (20, 21, 23, 43, 48)
In line: 6 (20, 17, 30, 33, 43) No. '30' is found in line 10 (14, 24, 30, 40, 45)
票数 1
EN

Stack Overflow用户

发布于 2020-08-28 22:08:15

三个嵌套循环似乎不太有效,但对我来说这是最明显的解决方案。

对于列表中的每个元组,对元组中的每个数字进行迭代,并将其与列表其余部分的每个元组中位于相同位置的数字进行比较,直到找到匹配为止。

代码语言:javascript
运行
复制
for lineno1, tup in enumerate(R):
    # iterate over the current tuple
    for i, num in enumerate(tup):
        # compare every number in the tuple to the rest of the list
        for lineno2 in range(lineno1+1, len(R)):
            tup2 = R[lineno2]
            if num == tup2[i]:
                print(f"In line: {lineno1+1} {tup} No. '{num} is found in line {lineno2+1} {tup2}.")
                break
票数 1
EN

Stack Overflow用户

发布于 2020-08-28 22:10:45

我不确定我的问题是否正确,尤其是因为我认为你快到了。

代码语言:javascript
运行
复制
R = [(20, 12, 40, 42, 45), (40, 21, 40, 42, 49),
    (6, 19, 22, 36, 48), (2, 5, 20, 24, 33),
    (8, 12, 24, 28, 44), (3, 15, 29, 30, 37),
    (20, 17, 30, 33, 43), (3, 15, 16, 29, 42),
    (17, 18, 20, 35, 39), (20, 21, 23, 43, 48),
    (14, 24, 30, 40, 45),]
for i,x in enumerate(R):
    a = set(x)
    for j in range(i+1,len(R)):
        y = R[j]
        b = set(y)
        ab = a&b
        for n in ab:
            print(f"In line: {i+1} {x} No. '{n}' is found in line {j+1} {y}.")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63640866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档