Python Forum
Delete strings from a list to create a new only number list - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Delete strings from a list to create a new only number list (/thread-39876.html)



Delete strings from a list to create a new only number list - Dvdscot - Apr-27-2023

Hello,

I am doing a Python training course and am stuck at this question:

Got a list:
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]

Want to have this result:
Num_List = [10, 20, 30, 40]

Used this code:
Num_List = []
for entry in range(len(Char_List)):
    if type(entry) != str:
        Num_List.append(entry)
print(Num_List)
But I get [0, 1, 2, 3, 4, 5], the indexes of the complete Char_List is shown instead of the numeric content. Thanks.


RE: Delete strings from a list to create a new only number list - paul18fr - Apr-27-2023

maybe using isinstance like:

Num_List = []
for Num in Char_List: if not isinstance(Num, str): Num_List.append(Num)
print(Num_List)



RE: Delete strings from a list to create a new only number list - Axel_Erfurt - Apr-27-2023

use for entry in Char_List

Char_List = ['Bla', 'Blu', 10, 20, 30, 40]

Num_List = []
for entry in Char_List:
    if type(entry) != str:
        Num_List.append(entry)
print(Num_List)
or for using len

Char_List = ['Bla', 'Blu', 10, 20, 30, 40]

Num_List = []
for x in range(len(Char_List)):
    if type(Char_List[x]) != str:
        Num_List.append(Char_List[x])
print(Num_List)



RE: Delete strings from a list to create a new only number list - DeaD_EyE - Apr-27-2023

Same as a list-comprehension:
mixed_types = ['Bla', 'Blu', 10, 20, 30, 40]

numbers = [element for element in mixed_types if isinstance(element, int)]
Or with filter:
def isint(x):
    return isinstance(x, int)


mixed_types = ['Bla', 'Blu', 10, 20, 30, 40]
numbers = list(filter(isint, mixed_types))



RE: Delete strings from a list to create a new only number list - deanhystad - Apr-27-2023

Quote:But I get [0, 1, 2, 3, 4, 5], the indexes of the complete Char_List is shown instead of the numeric content. Thanks.
The problem is you never referenced the items in the list. This gives you sequence of numbers whose only relation to the list is the count is the same.
for entry in range(len(Char_List)):  # entry is not an item from  the list.  It is a number 0 to 5
Your code would work fine if you checked the actual list values.
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]
Num_List = []
for entry in Char_List:  #<- Loop through the list values
    if type(entry) != str:
        Num_List.append(entry)
print(Num_List)



RE: Delete strings from a list to create a new only number list - learningPython - Apr-27-2023

use below code:

import numpy as np
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]
Num_List = np.arange(10,len(Char_List)*10,10)
print(Num_List)



RE: Delete strings from a list to create a new only number list - learningPython - Apr-28-2023

(Apr-27-2023, 11:32 PM)learningPython Wrote: use below code:

import numpy as np
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]
Num_List = np.arange(10,len(Char_List)*10,10)
print(Num_List)




I misunderstood your question earlier. Here is the right code:
If you want to use numpy library:

import numpy as np
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]
arr = np.array(Char_List)    #### converting into numpy array
Num_List = np.array(arr[np.char.isdigit(arr)],dtype = 'int')  ## np.char.isdigit(arr) gives boolean output True if array valye is digit else False. Then creating array out of it with datatype "int"
print(Num_List)
Ouput:
[10 20 30 40]


RE: Delete strings from a list to create a new only number list - Marbelous - May-01-2023

If this is a training course question, maybe you should just do what the question actually asks?

Enumerate through your list.
Check if current iteration is a string and if so, delete it.
Return (or print) the list that's now devoid of strings.

This should be simple and only require basic Python. You don't need type-checking tools, list comprehensions or Numpy(!? Doh ?!)

Once you can do that, preferably on you own, take a look at some of the other answers posted for alternative methods.


RE: Delete strings from a list to create a new only number list - deanhystad - May-01-2023

Quote:If this is a training course question, maybe you should just do what the question actually asks?
You are assuming the instructions say delete the string values from the list. That is in the thread topic, but the OP says this:
Got a list:
Char_List = ['Bla', 'Blu', 10, 20, 30, 40]

Want to have this result:
Num_List = [10, 20, 30, 40]
One implies changing the list object, the other implies making a new list (otherwise why the new variable name?). Changing the existing list is a more interesting challenge.