首页 > 解决方案 > 是否有任何其他方法可以在 Python 中执行以下程序

问题描述

我正在尝试比较两个列表中的值,如果 list1 中的任何值大于 list2 中的值,我需要增加计数并删除 list1 和 list2 中的比较值。我不应该比较之前比较并满足条件的相同元素。

我这样做了:

def main():

    list1 = list(map(int,input().split()))
    list2 = list(map(int,input().split()))

    list1.sort()
    list2.sort()
    count = 0

    for i in range(len(list1)):
        for j in range(len(list2)):
            if list1[i] > list2[j]:
                count += 1
            else:
                break
    print(count)

main()

输入:

3 6 7 5 3 5 6 2 9 1 
2 7 0 9 3 6 0 6 2 6

排序后:

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

我的输出:

49

期望的输出:

7

满足条件后,我尝试从列表中删除元素,但出现“列表索引超出范围”错误。

任何人都可以建议一种方法来做到这一点,我也尝试了以下方法:

while len(list1) > 0:
    if list1[0] > list2[0]:
        count += 1
        list1.remove(list1[0])
        list2.remove(list2[0])
    else:
        break
print(count)

上述方法的输出:

5

所需的输出:

7

有没有其他方法可以解决问题。谢谢你。

标签: pythonlistfor-loopwhile-loopconditional-statements

解决方案


您的问题只是询问 list1 中有多少元素大于 list2 考虑到元素已被删除。

您正在通过嵌套循环进行重复计算。只需存储 list2 的最小值,仅迭代 list1 检查该元素是否高于 list2 的最小值。如果是,则添加一个计数器并从 list2 中删除该元素。复杂度:O(mxn)。如果 list2 已排序,那么我们可以二进制搜索找到索引并在 O(log(n)) 中删除它。然后,复杂度变为 O(mxlog(n))

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


cnt = 0

for li in list1:
  mn = min(list2)
  if li > mn:
    cnt += 1
    list2.remove(mn)

print(cnt)

答:7


推荐阅读