Test 0 and false since false is 0
Sayth Renshaw
flebber.crue at gmail.com
Sat Jul 8 19:25:16 EDT 2017
> Another option is to test for type(value) == int:
>
> >>> before = ["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,
> {},0,0,9]
> >>> wanted = ["a","b",None,"c","d",1,False,1,3,[],1,9,
> {},9,0,0,0,0,0,0,0,0,0,0]
> >>> after = sorted(before, key=lambda x: x == 0 and type(x) == int)
> >>> assert str(after) == str(wanted)
> >>> after
> ['a', 'b', None, 'c', 'd', 1, False, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, 0, 0,
> 0, 0, 0, 0, 0]
>
>
> That way float values will be left alone, too:
>
> >>> sorted([0.0, 0, False, [], "x"], key=lambda x: x == 0 and type(x) ==
> int)
> [0.0, False, [], 'x', 0]
I have been reading this solution
> >>> after = sorted(before, key=lambda x: x == 0 and type(x) == int)
it is really good, however I don't understand it enough to reimplement something like that myself yet.
Though I can that lambda tests for 0 that is equal to an int why does sorted put them to the end?
Cheers
Sayth
More information about the Python-list
mailing list