繁体   English   中英

比较两个列表的元素

[英]Compare elements of two list

我得到了两个列表,比如 list1 和 list2。 我必须以这样的方式排列 list1 的元素,即在特定索引处,list1 的元素大于 list2 的元素。 我们必须找出 list1 中有多少这样的元素。 例如:

list1=[20,30,50]
list2=[60,40,25]

这里只有元素索引 2 更大,即 50>25,但是如果我们在 list1 中交换 50 和 30 所以,

list1=[20,50,30]
list2=[60,40,25]

然后 50 > 40(在索引 1)和 30 > 25(在索引 2)。 所以我们得到了 2 个元素 50 和 30,它们在各自的索引处更大。 这是我的方法

def swap(a,b):
    a,b=b,a
    return a,b
n=3
g=list(map(int,input().split()))
o=list(map(int,input().split()))
c=0
for i in range(n):
    if o[i]>g[i]:
        for j in range(i+1,n):
            if g[j]>o[i]:
                g[i],g[j]=swap(g[i],g[j])
                c+=1
                break
    else:
        c+=1
print(c)

但对于

list1= [3,6,7,5,3,5,6,2,9,1]
list2= [2,7,0,9,3,6,0,6,2,6]

它给出 c=6 但预期输出是 c=7

您必须对两个列表进行排序,然后遍历它们以查找 list1 的值大于 list2 的下一个值的“匹配项”。 这会将具有最小可能差异的值配对,从而使配对最大化。

例如:

list1=[20,30,50]
list2=[60,40,25]

iter1 = iter(sorted(list1))  # iterator to run through sorted list1
n1    = next(iter1,None)     # n1 is current number in list1
count = 0                    # count of paired elements (n1>n2)
for n2 in sorted(list2):               # go through sorted list 2
    while n1 is not None and n1 <= n2: # skip over ineligible items of list1
        n1 = next(iter1,None)
    if n1 is None: break               # stop when list 1 is exhausted
    count += 1                         # count 1 pair and move on to next of list2

print(count) # 2
list1= [3,6,7,5,3,5,6,2,9,1]
list2= [2,7,0,9,3,6,0,6,2,6]

list1 = sorted(list1)
it = iter(enumerate(list1))
list2  = sorted(list2)
c = next(it)
good = []
for i, n in enumerate(list2 ):
    try:
        while c[1] < n:
            c = next(it)
        good.append([i, c[0]])
        c = next(it)
    except StopIteration:
        break

for idx1, idx2 in good:
    list1[idx1], list1[idx2] = list1[idx2], list1[idx1]

final_l1_l2 = sum(a > b for a, b in zip(list1, list2))# how many l1 are > l2
print(final_l1_l2)

输出:

   7

此外,您可以在重新排列后打印 list1 和 list2:

print(list1)
print(list2)

输出:

[1, 2, 3, 3, 5, 6, 6, 7, 9, 5]
[0, 0, 2, 2, 3, 6, 6, 6, 7, 9]

这个想法是对两个列表进行排序,然后检查list1中的哪些元素大于list2的元素,如果list1一个元素较小,则list2的当前元素只是转到list1的下一个元素,直到没有更多元素列表list1元素

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM