简体   繁体   English

比较两个列表的元素

[英]Compare elements of two list

I have been given two lists, say list1 and list2.我得到了两个列表,比如 list1 和 list2。 I have to arrange the elements of the list1 in such a way that at particular index the element of list1 is greater than the element of list2.我必须以这样的方式排列 list1 的元素,即在特定索引处,list1 的元素大于 list2 的元素。 We have to find how many such elements of list1 are there.我们必须找出 list1 中有多少这样的元素。 For example:例如:

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

Here only element index 2 is greater ie 50>25, but if we swap 50 and 30 in list1 So,这里只有元素索引 2 更大,即 50>25,但是如果我们在 list1 中交换 50 和 30 所以,

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

then 50 > 40 ( at index 1) and 30 > 25 (at index 2).然后 50 > 40(在索引 1)和 30 > 25(在索引 2)。 So we got 2 elements 50 and 30 which are greater at their respective index.所以我们得到了 2 个元素 50 和 30,它们在各自的索引处更大。 Here is my approach这是我的方法

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)

But for但对于

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

Its giving c=6 but expected output is c=7它给出 c=6 但预期输出是 c=7

You have to sort the two lists and then run through them to find "matches" where a value of list1 is greater than the next value of list2.您必须对两个列表进行排序,然后遍历它们以查找 list1 的值大于 list2 的下一个值的“匹配项”。 This will pair up the values with the smallest possible difference and thus maximize the pairings.这会将具有最小可能差异的值配对,从而使配对最大化。

For example:例如:

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)

output:输出:

   7

also, you can print list1 and list2 after the rearrange:此外,您可以在重新排列后打印 list1 和 list2:

print(list1)
print(list2)

output:输出:

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

the idea is to sort both lists and then to check what elements from list1 are greater than the elements from list2 if one element from list1 it is smaller then the current element from list2 just go to the next element from the list1 till there are no more elements in list1这个想法是对两个列表进行排序,然后检查list1中的哪些元素大于list2的元素,如果list1一个元素较小,则list2的当前元素只是转到list1的下一个元素,直到没有更多元素列表list1元素

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

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