成对比较多个列表

2024-04-25 19:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对4个列表有问题,每个列表有4个编号:

P1=[3,1,3,4]

P2=[5,4,3,7]

P3=[7,4,8,1]

P4=[10,3,2,1]

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

3对:p1p2p3、p1p2p4、p1p3p4、p2p3p4

4对:p1p2p4p4

结果如下:

p1p2=[5,4,3,7]

p1p3=[7,4,8,4]

p1p4=[10,3,3,4]

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

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()   

有更好的方法吗


2条回答

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

from itertools import combinations
P1= [3,1,3,4]
P2= [5,4,3,7]
P3= [7,4,8,1]
P4= [10,3,2,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, 1, 3, 4] [5, 4, 3, 7]
[5, 4, 3, 7]
Done

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

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

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

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

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


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

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

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

Finding combination for tuples  [5, 4, 3, 7] [7, 4, 8, 1] [10, 3, 2, 1]
[10, 4, 8, 7]
Done


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

您可以尝试将zipmax一起使用

zipp1p4{}的情况下创建pair-like,max采用max元素,如[10, 3, 3, 4]

p1 = [3,1,3,4]

p2 = [5,4,3,7]

p3 = [7,4,8,1]

p4 = [10,3,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, 3, 3, 4]
[10, 4, 8, 4]

相关问题 更多 >

    热门问题