注:本文所有代碼均經(jīng)過(guò)Python 3.7實(shí)際運(yùn)行檢驗(yàn),保證其嚴(yán)謹(jǐn)性。
Python基礎(chǔ)練習(xí)題25:合并兩個(gè)列表并去重
輸入兩個(gè)列表alist和blist,要求列表中的每個(gè)元素都為正整數(shù)且不超過(guò)10(各自列表中不含重復(fù)元素);合并alist和blist,并將兩個(gè)列表相互重復(fù)的元素去掉后輸出一個(gè)新的列表clist。
同時(shí)為保證輸出結(jié)果一致,請(qǐng)將集合內(nèi)元素排序之后再輸出。
如對(duì)于列表alist,可輸出sorted(alist)。
輸入格式:
共兩行,每一行都用來(lái)輸入列表中的元素值,以空格隔開(kāi)。
輸出格式:
共一行,以列表形式打印輸出。
輸入樣例:
1 2 3
4 3 2
輸出樣例:
[1,2,3,4]
解答:解決的思路是,先在其中一個(gè)列表中去重兩個(gè)列表共有的元素,再把兩個(gè)列表合并到一個(gè)列表當(dāng)中,并排序即可。
問(wèn)題的難點(diǎn)在于如何去重。因?yàn)榱斜砭哂锌勺冃?,非常靈活,在變化的過(guò)程中可能出現(xiàn)元素減少等不確定情況。這時(shí)我們可以想辦法讓其變得“不可變”,才更有利于去重。
列表和元組的性質(zhì)相當(dāng)類似,最大的區(qū)別就是,一個(gè)是可變的,一個(gè)是不可變的。于是我們想到了列表元組互相轉(zhuǎn)換的方法。
alist=list(map(int,input().split()))
blist=list(map(int,input().split()))
t = tuple(alist) # 將具有可變性的列表轉(zhuǎn)換為不可變的元組。
for i in t: # 元組可防止列表可變之后產(chǎn)生不確定的錯(cuò)誤。
if i in blist:
alist.remove(i) # 在alist中去重和blist公有的元素。
lst = alist + blist # 去重后的兩個(gè)列表拼接成一個(gè)新的列表。
print(sorted(lst))
Python基礎(chǔ)練習(xí)題26:列表元素絕對(duì)值排序
輸入一個(gè)列表,要求列表中的每個(gè)元素都為整數(shù);
將列表中的所有元素按照它們的絕對(duì)值大小進(jìn)行排序,絕對(duì)值相同的還保持原來(lái)的相對(duì)位置,打印排序后的列表(絕對(duì)值大小僅作為排序依據(jù),打印出的列表中元素仍為原列表中的元素)。
輸入格式:
共一行,列表中的元素值,以空格隔開(kāi)。
輸出格式:
共一行,為一個(gè)列表。
輸入樣例:
-2 1 3
輸出樣例:
[1, -2, 3]
解答:列表的排序有sorted(list)和list.sort()兩個(gè)常用的途徑。它們可以采用一個(gè)可選參數(shù)key來(lái)根據(jù)key這個(gè)指標(biāo)進(jìn)行排序,詳見(jiàn)本系列之前的文章:Python內(nèi)置序列函數(shù)之reversed、sorted函數(shù)。
alist=list(map(int,input().split()))
alist = sorted(alist, key=lambda x: abs(x))
# 也可以用alist.sort(key=lambda x: abs(x))
print(alist)
To be continued.