python - 是否有任何其他方法可以在 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
有没有其他方法可以解决问题。谢谢你。
解决方案
您的问题只是询问 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
推荐阅读
- jira - 附加屏幕的 Jira Rest API 项目创建
- python - 如何从熊猫数据框熊猫的交易表中获取唯一ID的月数
- import - Stata:导入带有多个多字符分隔符的txt
- excel - PowerQuery (M) 中的相对文件夹/文件路径
- python - 带有字母数组的 DataFrame
- bash - 在新的 tmux 会话中显示欢迎消息
- line - Tableau中雷达图的连接线
- php - Symfony 5.2 PHP 8 不能使用 format_datetime() 法语
- python - SQLalchemy 类型的值
- email - CRM 动态。电子邮件。工作流程