My answer is not exactly to your question but after you read this, I hope you can decide which type you need to choose for your needs.
Python’s lists are variable-length arrays, not Lisp-style linked lists. The implementation uses a contiguous array of references to other objects, and keeps a pointer to this array.
This makes indexing a list a[i] an operation whose cost is independent of the size of the list or the value of the index.
When items are appended or inserted, the array of references is resized. Some algorithm is applied to improve the performance of appending items repeatedly; when the array must be grown, some extra space is allocated so the next few times don’t require an actual resize i.e over-allocation. More Information
Removing vs Pop vs Delete:
At first glance it looks like all of them are doing the same thing.
Under the hood its behaving different.
removing : remove an element from the list by iterating from 0 index till the first match of the element is found. taking more time to iterate if the element is at the end.
pop : removing element from the list by using the index. taking less time.
del : is a python statement that removes a name from a namespace, or an item from a dictionary, or an item from a list by using the index.
REMOVE:
- it removes the first occurence of value.
- raises ValueError if the value is not present.
- it takes only one argument, so you can't remove multiple value in one shot.
POP:
- remove and return item at index (default last).
- Raises IndexError if list is empty or index is out of range.
- it takes only one argument, so you can't remove multiple value in one shot.
DEL:
- remove the item at index and return nothing.
- it can remove slices from a list or can clear the whole list.
Benchmark:
Worst case : deleting from the end of the list.
yopy:-> python -m timeit "x=range(1000)" "x.pop(999)"
100000 loops, best of 3: 10 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.remove(999)"
10000 loops, best of 3: 31.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[999]"
100000 loops, best of 3: 9.86 usec per loop
yopy:->
Best case: begining of the list.
yopy:-> python -m timeit "x=range(1000)" "x.remove(1)"
100000 loops, best of 3: 10.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.pop(1)"
100000 loops, best of 3: 10.4 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[1]"
100000 loops, best of 3: 10.4 usec per loop
yopy:->
Point to be noted:
if array grows or shrinks in the middle
- Realloc still depends on total length.
- But, All the trailing elements have to be copied
So, now I hope you can decide what you need to choose for your needs.
Answer from James Sapam on Stack OverflowHow to delete all the items (in a list) beautifully?
[Lists] Removing values from one list and Transfering it to another(While vs For Loop)
Videos
My answer is not exactly to your question but after you read this, I hope you can decide which type you need to choose for your needs.
Python’s lists are variable-length arrays, not Lisp-style linked lists. The implementation uses a contiguous array of references to other objects, and keeps a pointer to this array.
This makes indexing a list a[i] an operation whose cost is independent of the size of the list or the value of the index.
When items are appended or inserted, the array of references is resized. Some algorithm is applied to improve the performance of appending items repeatedly; when the array must be grown, some extra space is allocated so the next few times don’t require an actual resize i.e over-allocation. More Information
Removing vs Pop vs Delete:
At first glance it looks like all of them are doing the same thing.
Under the hood its behaving different.
removing : remove an element from the list by iterating from 0 index till the first match of the element is found. taking more time to iterate if the element is at the end.
pop : removing element from the list by using the index. taking less time.
del : is a python statement that removes a name from a namespace, or an item from a dictionary, or an item from a list by using the index.
REMOVE:
- it removes the first occurence of value.
- raises ValueError if the value is not present.
- it takes only one argument, so you can't remove multiple value in one shot.
POP:
- remove and return item at index (default last).
- Raises IndexError if list is empty or index is out of range.
- it takes only one argument, so you can't remove multiple value in one shot.
DEL:
- remove the item at index and return nothing.
- it can remove slices from a list or can clear the whole list.
Benchmark:
Worst case : deleting from the end of the list.
yopy:-> python -m timeit "x=range(1000)" "x.pop(999)"
100000 loops, best of 3: 10 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.remove(999)"
10000 loops, best of 3: 31.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[999]"
100000 loops, best of 3: 9.86 usec per loop
yopy:->
Best case: begining of the list.
yopy:-> python -m timeit "x=range(1000)" "x.remove(1)"
100000 loops, best of 3: 10.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.pop(1)"
100000 loops, best of 3: 10.4 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[1]"
100000 loops, best of 3: 10.4 usec per loop
yopy:->
Point to be noted:
if array grows or shrinks in the middle
- Realloc still depends on total length.
- But, All the trailing elements have to be copied
So, now I hope you can decide what you need to choose for your needs.
Use a list comprehension:
Scenario 1:
[item for item in my_list if 1 <= item <=5 ]
Scenario 2:
to_be_removed = {'a', '1', 2}
[item for item in my_list if item not in to_be_removed ]
Scenario 3:
[item for item in my_list if some_condition()]
Scenario 4(Nested list comprehension):
[[item for item in seq if some_condition] for seq in my_list]
Note that if you want to remove just one item then list.remove, list.pop and del are definitely going to be very fast, but using these methods while iterating over the the list can result in unexpected output.
Related: Loop “Forgets” to Remove Some Items
I've been reading Python Crash Course by Eric Matthes and btw it's a great book to read, and now I'm stumped with removing a value from one list and added to a new list. I was experimenting with both while and for loops, I noticed that with the for loop alone the program does not run how I inteded it to be. Although it is the exact same code just a while added to it works completely fine. The issue I'm having is just using the for loop, I can't completely remove all values in the list as I thought it would. Can someone tell me what is going on in that for loop that's causing it to skip value? Also I will cut and paste my code in the comment section