列表练习:四数之和
CSDN“每日一练”(Python )题目
练习题目
看到题目与《三数之和》类似,就“偷”其代码。🤠🤠
缩进太深,代码有点儿丑。🥴🥴
target = 0, 1, 2, 3, 4 打包输出四数和的符题数组。
python完整代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
# coding: utf-8
def isvalid(lis, lis0):
'''判断组合有效'''
temp = lis0[:]
for i in lis:
#print(i) #调试用语句。
if i in temp: #i在原列表置flag为True,删除原列表中的第一个i并继续遍历。
flag = True
temp.remove(i)
else: #i不在原列表,置flag为False并退出遍历。
flag = False
break
return flag
#input(f'\n\n{isvalid([2, 5, 9, 5], [0, 5, 9, 2, 3, 5, 4])}') #该行为调试函数功能代码。
def isremove(lis, lis2):
'''比较两列表元素是否相同'''
if len(lis)!=len(lis2): #列表元素不等,返回False。
return False
temp = lis2[:]
for i in lis:
if i in temp: #i在比对列表置flag为True,删除比对列表中的第一个i并继续遍历。
flag = True
temp.remove(i)
else: #i不在比对列表,置flag为False并退出遍历。
flag = False
break
return flag
#input(f'\n\n{isremove([2, -1, -1], [-1, 2, -1])}') #该行为调试函数功能代码。
def find_nums(target): #查找符题数组函数。
nums_out = []
for i in nums:
for j in nums:
for m in nums:
for n in nums:
if i+j+m+n==target:
new_nums = [i, j, m, n]
if new_nums not in nums_out and isvalid(new_nums, nums): #组合有效且不重复,追加到输出数组。
flag = True
for k in nums_out: #判断输出数组中是否有相同元素数组,有则继续下一组合。
if isremove(k, new_nums):
flag = False
break
if flag is True: #组合数组不在输出数组中,追加组合数组。
nums_out.append(new_nums)
return nums_out
# Main Codes
s = '''四数之和'''
nums = [1, 0, -1, 0, -2, 2]
target = 0, 1, 2, 3, 4 #预设求和值数组。
if __name__=='__main__':
for i in target:
print(f'\n\n{s:.^38}\n\n数组:{nums},四数和值:{i}。\n{"﹊"*21}\n\n符题组合:{find_nums(i)}\n\n{"The End":_^42}')
我的博文推荐:
- 排序数组中查找元素的重复起止位置(当前阅读1194)
- 柱状图中最大矩形(当前阅读1596)
- 电话拨号键盘的字母组合(当前阅读1206)
- 密码强度检测器(当前阅读1662)
- 求列表平衡点(当前阅读1694)
- 字符串统计(当前阅读1657)
- 尼姆游戏代码优化版(当前阅读816)
- 尼姆游戏(聪明版首发)(当前阅读3230)
推荐条件
点阅破千
参考文章:
上一篇: 生成器复习:无限项斐波那契数列
下一篇:
![老齐漫画头像](https://i-blog.csdnimg.cn/blog_migrate/8cbf2c45d8b57205b31ef4963b3b9854.jpeg)
精品文章:
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室