python之——list, lambda, map(), reduce()相關
阿新 • • 發佈:2018-12-29
一、給出以下python列表操作的答案:
(1) a=[1, 2, 3, 4, 5], a[::2] = ?, a[-2:] = ?
(2) 用一行程式碼實現,對列表a中偶數位置的元素,進行加3後求和?
(3) 將列表a的元素順序打亂,再對a進行排序而獲得列表b,把a和b按元素順序構造一個字典d。
解析:
(1)[::2]指從list的下標0開始擷取,一直到末位止,步長為2。所以:
a[::2]=[1,3,5]
a[-2]=4, a[-2:]表示取到末位。所以:
a[-2:]=[4,5]
(2)列表a中偶數位置的為元素:[2,4]。所以:
a[1::2]=[2,4]
進行加3,因要求用一行程式碼實現,所以可以lambda函式。它需與map()函式結合使用:
map(lambda x, y: x+y, a[1::2])
# 返回結果
[5,7]
map()函式語法,map()返回一個列表對映:
# function:函式; iterable,...:一個或多個序列
map(function, iterable, ...)
再對列表a中奇數位置的元素[1,2,3]求和:
sum(a[::2])
最後將奇數位置的元素和,與加3後的偶數位置的元素列表,加起來。需返回一個最終整數值,所以用reduce()函式:
reduce(lambda x, y:x+y, map(lambda x: x+3, li[1::2]),sum(li[::2]))
注:reduce()語法
# 此處:initializer為sum(li[::2])
reduce(function, iterable[, initializer])
在 Python3 中,reduce() 函式已經被從全域性名字空間裡移除了,它現在被放置在 functools 模組裡,如果想要使用它,則需要通過引入 functools 模組來呼叫 reduce() 函式:
from functools import reduce
二、有兩個列表:
a = [1, 2, 3, 4, 5]
b = [5, 9, 1, 3, 7, 2, 8]
合併這兩個列表,去除重複元素,並且保持元素的排列順序不變。
解答:
# answer 1
for i in b:
if i not in a:
a.append(i)
print(a)
# answer 2
print (a + [x for x in b if x not in a])