Python Forum

Full Version: Replace element in a nested list
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I’m writing to ask if you could help me with a short Python example. Here’s a list of the list of strings:

my_string = [[89, 111, 117, 32], [104, 97, 118, 101, 32], [109, 97, 100, 101, 32], [109, 121, 32], [115, 111, 117, 108, 46]]

Could you suggest how to implement this into a statement that would enable one to replace all values less than a certain value by None (32, 46 => None), and then subtract the rest of the lists by another value? Something like:

if number < 65: q = None
else q = number - 12

I tried implementing this statement but with no luck:
for i in my_string:
    if i < 65:
        i == None
I imagine it must have to do to something with the fact that I’m using a nested list of strings, which I need to preserve.

Thank you for your time!
Here is a way
my_string = [[None if y < 65 else y - 12 for y in x] for x in my_string]
A loop version of Gribouillis's solution, if you are not familiar with list comprehensions:

new_list = []
for sub_list in my_string:
    new_list.append([])
    for item in sub_list:
        if item < 65:
            new_list[-1].append(None)
        else:
            new_list[-1].append(item - 12)
my_string = new_list
They both do the same thing, the list comprehension syntax is just way more compact.
Thank you! This is very helpful.
Or, if you'd rather not build a new list, you can use indexes:
>>> my_string = [[89, 111, 117, 32], [104, 97, 118, 101, 32], [109, 97, 100, 101, 32], [109, 121, 32], [115, 111, 117, 108, 46]]
>>> for outer_ndx, out in enumerate(my_string):
...   for inner_ndx, inner in enumerate(out):
...     if inner < 65:
...       my_string[outer_ndx][inner_ndx] = None
...
>>> my_string
[[89, 111, 117, None], [104, 97, 118, 101, None], [109, 97, 100, 101, None], [109, 121, None], [115, 111, 117, 108, None]]