微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

成对比较多个列表

如何解决成对比较多个列表

我有 4 个列表的问题,每个列表有 4 个数字:

P1= [3,1,3,4]

P2= [5,4,7]

P3= [7,8,1]

P4= [10,2,1]

我需要以组合方式获得最大的数字,例如: 2 对:p1p2、p1p3、p1p4、p2p3、p2p4、p3p4

3 对:p1p2p3、p1p2p4、p1p3p4、p2p3p4

4 对:p1p2p3p4

结果:

p1p2= [5,7]

p1p3= [7,4]

p1p4= [10,4] ……

我编写了这个程序并将其存储在矩阵而不是列表中。 ' n= int (input("请输入矩阵大小:"))

matrix=[]
for i in range(n): #loop for rows
    c=[]
    for j in range(n):# loop for columns
        j=int(input("enter the value of P["+str(i)+"]"+"["+str(j)+"]"))
        c.append(j)

    print()                     # to make a line between the entries
    matrix.append(c)            # store the matrix c in the new empty one (matrix)

for i in range(n):
    for j in range(n):
        print(matrix[i][j],end="")
    print()
##############################################
#compar row by row element wise 2 terms
m2t=[]
for i in range(n-1):
    for j in range(n):
        if(matrix[i][j]>=matrix[i+1][j]):
            m2t.append(matrix[i][j])
        else:
            m2t.append(matrix[i+1][j])
            print(m2t,"#1")       # check if it get here or not
    
    print()
#printing the matrix of the 2 terms result 
for a in range(n-1):
    for b in range(n):
        print(m2t,end="")
    print()   

有更好的方法吗?

解决方法

您可以尝试将 zipmax 一起使用。

zip 创建 pair like in case p1p4 [(3,10),(1,3),(3,2),(4,1)]max 使用 max 元素,例如 [10,3,4]

p1 = [3,1,4]

p2 = [5,4,7]

p3 = [7,8,1]

p4 = [10,2,1]

p1p4 = [max(i) for i in zip(p1,p4)]
print(p1p4)

p1p3p4 = [max(i) for i in zip(p1,p3,p4)]
print(p1p3p4)
[10,4]
[10,4]
,

至少还有一种方法。等待更优雅的解决方案。

from itertools import combinations
P1= [3,4]
P2= [5,7]
P3= [7,1]
P4= [10,1]

Full_List = [P1,P2,P3,P4]

for r in range(2,5,1):
    Combinations = combinations(Full_List,r)
    print("Finding maximum for a combination size of %d"%r)
    for eachCombination in Combinations:
        print("Finding combination for tuples ",*eachCombination)
        print(list(map(max,zip(*eachCombination))))
        print("Done")
        print()
    print()

给出以下输出。

Finding maximum for a combination size of 2
Finding combination for tuples  [3,4] [5,7]
[5,7]
Done

Finding combination for tuples  [3,4] [7,1]
[7,4]
Done

Finding combination for tuples  [3,4] [10,1]
[10,4]
Done

Finding combination for tuples  [5,7] [7,7]
Done

Finding combination for tuples  [5,7] [10,7]
Done

Finding combination for tuples  [7,1] [10,1]
Done


Finding maximum for a combination size of 3
Finding combination for tuples  [3,7]
Done


Finding maximum for a combination size of 4
Finding combination for tuples  [3,7]
Done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。