Kee
Kee

Reputation: 163

Removing a num from a string in a list of numbers

An example like:

print("1.", get_list_nums_without_9([589775, 677017, 34439, 48731548,     782295632, 181967909]))
print("2.", get_list_nums_without_9([6162, 29657355, 5485406, 422862350, 74452, 480506, 2881]))
print("3.", get_list_nums_without_9([292069010, 73980, 8980155, 921545108, 75841309, 6899644])) 
print("4.", get_list_nums_without_9([]))

nums = [292069010, 73980, 8980155, 21545108, 7584130, 688644, 644908219, 44281, 3259, 8527361, 2816279, 985462264, 904259, 3869, 609436333, 36915, 83705, 405576, 4333000, 79386997]
print("5.", get_list_nums_without_9(nums))

I'm trying to get number list without 9. If the list is empty or if all of the numbers in the list contain the digit 9, the function should return an empty list. I tried the function below, it doesn't work.

def get_list_nums_without_9(a_list):
    j=0
    for i in a_list:
    a_list[j]=i.rstrip(9)
    j+=1
    return a_list

expected:

1. [677017, 48731548]
2. [6162, 5485406, 422862350, 74452, 480506, 2881]
3. []
4. []
5. [21545108, 7584130, 688644, 44281, 8527361, 83705, 405576, 4333000]

Upvotes: 1

Views: 51

Answers (2)

Jean-François Fabre
Jean-François Fabre

Reputation: 140297

your lists contain integers. To remove the ones containing 9 the best way is to test if 9 belongs to the number as string and rebuild the output using a list comprehension with a conditional.

(Besides, rstrip removes the trailing chars of a string. Not suitable at all for your problem)

def get_list_nums_without_9(a_list):
    return [x for x in a_list if "9" not in str(x)]

testing with your data:

>>> numbers = [
...    [589775, 677017, 34439, 48731548, 782295632, 181967909],
...    [6162, 29657355, 5485406, 422862350, 74452, 480506, 2881],
...    [292069010, 73980, 8980155, 921545108, 75841309, 6899644],
...    [],
...    [292069010, 73980, 8980155, 21545108, 7584130, 688644, 644908219, 
...     44281, 3259, 8527361, 2816279, 985462264, 904259, 3869, 609436333, 
...     36915, 83705, 405576, 4333000, 79386997]
... ]

>>> for i, l in enumerate(numbers, 1):
...    print("{}. {}".format(i, get_list_nums_without_9(l)))
1. [677017, 48731548]
2. [6162, 5485406, 422862350, 74452, 480506, 2881]
3. []
4. []
5. [21545108, 7584130, 688644, 44281, 8527361, 83705, 405576, 4333000]

Upvotes: 3

cdlane
cdlane

Reputation: 41925

You don't want to replace anything in the list, you want to generate a new list based on what you detect in the old list:

def get_list_nums_without_9(numbers):
    sans_9 = []

    for number in numbers:
        if '9' not in str(number):
            sans_9.append(number)

    return sans_9

This will get you an empty list if there are no valid numbers.

Upvotes: 1

Related Questions