【问题描述】 输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7), (1,8)。重复的元组元素只保留一个,结果按元组第一个元素从小到大顺序输出。 【样例输入】 numbers:3,4,5,7,2,8,1 【样例输出】 [(1, 8), (2, 7), (4, 5)] 【难点解析】可以一开始定义一个空列表Lst,然后每次将符合要求的,例如Lst.append((1,8))追加一个元组的方式(看清楚里面(1,8)的写法),把元组作为列表的元素插入列表。
时间: 2023-06-19 15:08:20 浏览: 210
Python 列表 使用练习
5星 · 资源好评率100%
实现代码如下:
```python
def find_pairs(nums):
nums_set = set(nums)
result = []
for i in nums_set:
if 9-i in nums_set and i <= 9-i:
result.append((i, 9-i))
result.sort()
return result
# 测试样例
nums = [3, 4, 5, 7, 2, 8, 1]
print(find_pairs(nums))
# 输出 [(1, 8), (2, 7), (4, 5)]
```
首先将输入的列表转换为集合,这样可以提高查找元素是否存在的效率。然后遍历集合中的元素,判断是否存在另一个元素与其相加等于9,并且这两个元素中小的在前,大的在后,如果存在,则将其作为一个元组添加到结果列表中。最后将结果列表按元组第一个元素从小到大排序,然后返回结果。
阅读全文