Python Forum

Full Version: Delete strings from a list to create a new only number list
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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.
maybe using isinstance like:

Num_List = []
for Num in Char_List: if not isinstance(Num, str): Num_List.append(Num)
print(Num_List)
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)
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))
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)
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)
(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]
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.
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.