python列表排序不改變順序

2021-10-01 13:59:52 字數 2383 閱讀 1595

去重可以亂序

lis =[3

,1,4

,3,6

,3,2

,4,9

,1]lis2 =

list

(set

(lis)

)print

(lis2)

去重不改變原始順序

本質上 func1、func3 和 func6原理是一樣的,將列表遍歷一次,第一次出現到放到新到列表中

func2、func4 和 func5原理是一樣的,先將列表去重,然後按原始列表的索引重新排序

from functools import

reduce

deffunc1()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] list_non_duplicate =

for i in list_duplicate:

if i not

in list_non_duplicate:

print

(list_non_duplicate)

deffunc2()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] list_non_duplicate =

list

(set

(list_duplicate)

) list_non_duplicate.sort(key=list_duplicate.index)

print

(list_non_duplicate)

deffunc3()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] list_non_duplicate =

for i, v in

enumerate

(list_duplicate)

:if list_duplicate.index(v)

== i:

# todo 值v是第一次出現,新增到新列表中

print

(list_non_duplicate)

deffunc4()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] list_non_duplicate = list_duplicate[:]

for i in list_duplicate:

while list_non_duplicate.count(i)

>1:

# todo list_non_duplicate 去重

del list_non_duplicate[list_non_duplicate.index(i)

] list_non_duplicate.sort(key=list_duplicate.index)

print

(list_non_duplicate)

deffunc5()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] list_non_duplicate =

sorted

(set

(list_duplicate)

, key=list_duplicate.index)

print

(list_non_duplicate)

deffunc6()

: list_duplicate =[3

,1,4

,3,6

,3,2

,4,9

,1] func =

lambda list_n_d, i: list_n_d if i in list_n_d else list_n_d +

[i] list_non_duplicate =

reduce

(func,[[

]]+ list_duplicate)

print

(list_non_duplicate)

if __name__ ==

'__main__'

: func1(

) func2(

) func3(

) func4(

) func5(

) func6(

)

json序列化不改變順序

fastjson對json字串進行序列化,序列化之後發現順序發生了改變,導致之後業務出現問題。解決方法 linkedhashmapjson json.parseobject message,linkedhashmap.class,feature.orderedfield jsonobject jso...

不改變相對順序,負數左邊正數右邊

不改變正負數之間的相對順序重新排列陣列,使得負數字於正數之前 1 舉例 如 1,7,5,2,9,3變成 5,9,1,7,2,3 2 方法一 從頭到尾掃瞄陣列,每次碰到乙個正數時,就把位於這個數字之後的所有數字到往前挪動一位。挪動之後在陣列的末尾有乙個空位,把這個正數填進去。整體的時間複雜度為o n ...

長列表效能優化(只展示資料 不改變資料)

我們應該都知道 vue 會通過 object.defineproperty 對資料進行劫持,來實現檢視響應資料的變化,然而有些時候我們的元件就是純粹的資料展示,不會有任何改變,我們就不需要 vue 來劫持我們的資料,在大量資料展示的情況下,這能夠很明顯的減少元件初始化的時間。所以,我們可以通過 ob...