[英]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.