1. 程式人生 > >python之——list, lambda, map(), reduce()相關

python之——list, lambda, map(), reduce()相關

一、給出以下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])