False == 0 problem | Sololearn: Learn to code for FREE!

+1

False == 0 problem

So there is a challenge in a website which is taking away my mental health The chalange is to move zeros of a list to the end without messing other items indices. My code: def move_zeros(array): for i in array: if str(i).isnumeric(): if i == 0: array.remove(i) array.append(i) return array The problem is the condition in my function doesn't filter the False if its present in the list. For example in this list : ["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9] It keeps removing False and adding 0 to the end I wrote another condition: for i in array: if type(i) == int and i == 0: array.remove(i) array.append(i) return array And even I tried (if str(i) == "0") But it just doesn't work and honestly I don't know why and what I'm missing here. Please help me understand.

12/30/2020 11:32:45 AM

pedram ch

15 Answers

New Answer

+4

Try if this will work: First, I made 2 new lists inside the function (arr and arr2). These 2 list will serve as our temporary storage of elements. - - - - - - - - - - - - - - - If it is 0, store it to "arr2". Otherwise, store it to "arr". For Example: INPUT: [1, 2, 0, False, 0, 4] # after iteration (zeroes to arr2, non-zeroes to arr) >> arr = [1, 2, False, 4] >> arr2 = [0, 0] - - - - - - - - - - - - - - Lastly, we used "arr.extend(arr2)" or just simply "arr += arr2" to concatenate them together. And this will be the output. >> [1, 2, False, 4, 0, 0] And I think the issue on your code is not the False == 0, I think it is the >> arr.remove(i) >> arr.append(i) - - - - - - - - - - - - - - - However this is just my own implementation. I will still try to solve and stick with your code. https://code.sololearn.com/c63TT79OzpPG/?ref=app

+3

You can: -loop through an ENUMERATED list -whenever you find a zero, pop the index -append a 0 to the end And keep in mind: 0 will never equal "0" False == 0

+3

pedram ch The False is filtered out. See this for further explanation. If something is still not clear, please feel free to ask. Thanks! https://code.sololearn.com/cSMfsY7PHMiq/?ref=app

+2

pedram ch Thanks! I'll check that site some time. And by the way, those solutions are good though.

+2

pedram ch Yeah, thanks for recommending that site. Its good for practicing. πŸ‘

+1

γ€Š Nicko12 》I understood your code thank you If we add (or str(array[i]) == '0.0') to the if condition it works since we also may have 0.0 in the list. But my question is why those conditions which I mentioned in the question doesn't filter out False. Type(False) is boolean , str(False).isnumeric() will give us false and str(False) == "0" is also False but none of them filters out the False and thats what confused me as hell. But that was a nice solution thank you for your help

+1

γ€Š Nicko12 》 thank you for the clear explanation in your code I really appreciate it Also I tried your edited code and it worked fine That was a life saver πŸ˜… Now that I solved it other people answers is unlocked for me to see I can share some of them with you if you are interested

+1

γ€Š Nicko12 》 sorry for delay The website is codewars they have legit challanges Two of people answers : def move_zeros(arr): l = [i for i in arr if isinstance(i, bool) or i!=0] return l+[0]*(len(arr)-len(l)) def move_zeros(array): return sorted(array, key=lambda x: x==0 and type(x) is not bool) 🀯🀯

+1

γ€Š Nicko12 》 yes they are super smart

+1

γ€Š Nicko12 》 offcours man Happy coding πŸ‘

0

Slick you are right I meant str(i) == "0" But why those conditions wont filter out the False from list I ran each of them separately in my ide and it worked (out of function) but it seems when they go in the function they just stop doing what they should do

0

γ€Š Nicko12 》 when I tried to submit your code it gave another error It should work for random inputs too: [False, 10, True, -2, 8, 1, 'string', 8, True, 7, 'y', 0, '0', 0, 0, 0] should equal [False, 10, True, -2, 8, '0', 1, 'string', 8, True, 7, 'y', 0, 0, 0, 0] Its because we may also have "0" in the list members.

0

γ€Š Nicko12 》 no just 0 integers should be at the end

0

pedram ch I edited my code above. Try it if it works.

0

pedram ch Oh do you mean other people's solution to this problem/challenge? Well.. Yes Ok, I think that will help me on my futures code and maybe I can learn from it too. Thanks! I appreciate it!