The question is to remove negatives from numbers.
When remove_negs([1, 2, 3, -3, 6, -1, -3, 1]) is executed, the result is: [1, 2, 3, 6, -3, 1]. The result is suppose to be [1, 2, 3, 6, 3, 1]. what is happening is that if there are two negative numbers in a row (e.g., -1, -3) then the second number will not get removed. 
    def main():
       numbers = input("Enter a list of numbers: ")
       remove_negs(numbers)
def remove_negs(num_list): 
  '''Remove the negative numbers from the list num_list.'''
    for item in num_list: 
        if item < 0: 
           num_list.remove(item) 
    print num_list
main()
                negative() function is used when we want to compute the negative of array elements. It returns element-wise negative value of an array or negative value of a scalar. Parameters : arr : [array_like or scalar] Input array.
The Python abs() method returns the absolute value of a number. The absolute value of a number is the number's distance from 0. This makes any negative number positive, while positive numbers are unaffected. For example, abs(-9) would return 9, while abs(2) would return 2.
It's generally a bad idea to remove elements from a list while iterating over it (see the link in my comment for an explanation as to why this is so). A better approach would be to use a list comprehension:
num_list = [item for item in num_list if item >= 0]
Notice that the line above creates a new list and assigns num_list to that. You can also do an "in-place" assignment of the form
num_list[:] = ...
which does not create a new list in memory, but instead modifies the memory location already being pointed to by num_list. This difference is explained in more detail here.
Much simpler:
>>> a = [ 1, 2, 3, -3, 6, -1, -3, 1]
>>> [x for x in a if x >= 0 ]
[1, 2, 3, 6, 1]
If you really do want to loop, try this:
def remove_negs(num_list): 
    r = num_list[:]
    for item in num_list: 
        if item < 0: 
           r.remove(item) 
    print r
This does what you want:
>>> remove_negs([ 1, 2, 3, -3, 6, -1, -3, 1])
[1, 2, 3, 6, 1]
The key is that the assignment statement r = num_list[:] makes a copy of num_list.  In order not to confuse the loop, We then remove items from r rather than from the list we are looping over.
More:  Python's treatment of variables is a bit subtle.  Python keeps variable names, like r or num_list separate from variable data, such as [1, 2, 3, 6, 1].  The names are merely pointers to the data.  Consider the assignment statement:
r = num_list
After this statement is run, r and num_list both point to the same data.  If you make a change to r's data, you are also making a change to num_list's data because they both point to the same data.  Now, consider:
r = num_list[:]
This statement tells python to modify num_list's data by taking only certain elements of it.  Because of this, python makes a copy of num_list's data.  It just so happens that [:] specifies that we want all of num_list's data unchanged but that doesn't stop python from making a copy.  The copy is assigned to r.  This means that r and mum_list now point to different data.  We can make changes to r's data and it doesn't affect num_list's data because they have different data.
If this is new to you, you might want to look at this tutorial about python's approach to variable names and variable data: Understanding Python variables and Memory Management
Examples:
>>> a = [ 1, 2, 3, -3, 6, -1, -3, 1]
>>> b = a   # a and b now point to the same place
>>> b.remove(-1) 
>>> a
[1, 2, 3, -3, 6, -3, 1]
Contrast with:
>>> a = [ 1, 2, 3, -3, 6, -1, -3, 1]
>>> b = a[:] # a and b now point to different data
>>> b
[1, 2, 3, -3, 6, -1, -3, 1]
>>> b.remove(-1)
>>> b
[1, 2, 3, -3, 6, -3, 1]
>>> a
[1, 2, 3, -3, 6, -1, -3, 1]
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With