1、題目要求:
編寫程序,輸入包含若干集合的列表,輸出這些集合的並集。要求使用reduce()函數和lambda表達式完成。
2、題目解讀:
(1)reduce() 函數:
語法
reduce(function, iterable[, initializer])
- function – 函數,有兩個參數
- iterable – 可迭代對象
- initializer – 可選,初始參數
實例
以下實例展示了 reduce() 的使用方法(採用“菜鳥教程案例”):
>>>def add(x, y) : # 兩數相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 計算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數
15
(1)lambda表達式:
介紹
lambda表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。
實例
# x,y爲函數參數,‘:’後面的就爲函數裏的操作,由於是匿名函數,所以這裏並沒有定義函數名稱
# 所以這個匿名函數做的事情就是把傳入的下x,y相加
add = lambda x, y : x+y
add(1,2) # 結果爲3
3、代碼:
#!/usr/bin/python
from functools import reduce
# 定義變量
numArr = []
# 接收用戶輸入集合個數,根據用戶輸入是數字,循環讓用戶輸入集合
n = input("請輸入集合個數:")
# 判斷n是否爲整數
if n.isdigit() == False:
print("輸入非法字符,程序退出!")
else:
for k in range(int(n)):
tip = "第輸入 %s 個集合列表 : " % str(k+1)
# 輸入集合,將 numSet 指向用戶輸入的集合
numSet = {n for n in input(tip).split(' ')}
# 將集合放入 numArr 列表中
numArr.append(numSet)
# 使用reduce()函數計算所有集合的並集
# reduce(function - 函數, iterable - 可迭代對象)
# lambda 匿名函數 ':'前是參數,後面是方法
result = reduce(lambda a, b: a & b, numArr)
# 輸出結果
if result:
print(result)
else:
print("所有集合的並集爲空!")
4、驗證:
輸入樣例:
樣例輸出: