0

I have been trying to solve a problem where I am given a list as input and I need to show an output with 7 attached to each string value if it doesn't contain a 7 already.

I have created a list and for the case of 7 not included I have attached the '7' using the for loop. So for example: for the input ["a7", "g", "u"], I expect output as ["a7","g7","u7"] but I am getting the output as follows
['a7', 'g', 'u', ['a77', 'g7', 'u7']]

I have tried to put the values in a new list using append but I am not sure how to remove the old values and replace it with new ones in existing list. Following is my code

class Solution(object):
    def jazz(self, list=[]):

        for i in range(len(list)):
            if '7' not in list[i]:
                li = [i + '7' for i in list]
                list.append(li)
                return list


if __name__ == "__main__":
    p = Solution()
    lt = ['a7', 'g', 'u']
    print(p.jazz(lt))
Avi Turner
  • 10,234
  • 7
  • 48
  • 75
  • Please do not name variables `list`, especially in code which uses `list` objects. This clobbers the built-in `list`, adds confusion, and usually results in very annoying bugs. – Michael Ruth Nov 23 '22 at 05:17
  • `[i.rstrip('7') + '7' for i in lt]` – deceze Nov 23 '22 at 05:50

2 Answers2

2

You can use a cleaner and more pythonic solution, no classes required, and much more concise:


def jazz(items):
    return [item if '7' in item else item+'7' for item in items]

if __name__ == "__main__":
    lt = ['a7', 'g', 'u']
    p = jazz(lt)
    print(p)

If you want to modify the original list you can use:

if __name__ == "__main__":
    lt = ['a7', 'g', 'u']
    lt[:] = jazz(lt)
    print(lt)

Avi Turner
  • 10,234
  • 7
  • 48
  • 75
2

@AviTurner already showed you the simplest way of doing it. I'm just gonna write some point about your solution:

  • You don't need to inherit from object in Python 3. check here
  • Don't use mutable objects for your parameters' default values unless you know what you're doing. check here.
  • Don't use built-in names like list for your variables.
  • You create a list li and then you append that, This appends the whole list as a single item. Instead you either want to append individual items or .extend() it.
  • It's perfectly ok to iterate this way for i in range(len(something)) but there is a better approach, if you need only the items, you can directly get those items this way : for item in something. If you also need the indexes: for i, item in enumerate(something)
S.B
  • 13,077
  • 10
  • 22
  • 49