docs: def set(self, keyword, value):
          """Set the element of the list after the given keyword.
  
          Parameters
          ----------
          keyword : str
              The keyword parameter to find in the list.
              Putting a colon before the keyword is optional, if no colon is
              given, it is added automatically (e.g. "keyword" will be found as
              ":keyword" in the list).
  
          value : KQMLObject or str
              If the value is given as str, it is instantiated as a KQMLToken
  
          Example:
              kl = KQMLList.from_string('(FAILURE)')
              kl.set('reason', 'INVALID_PARAMETER')
          """
          if not keyword.startswith(':'):
              keyword = ':' + keyword
          if isinstance(value, str):
              value = KQMLToken(value)
          if isinstance(keyword, str):
              keyword = KQMLToken(keyword)
          found = False
          for i, key in enumerate(self.data):
              if key.to_string().lower() == keyword.lower():
                  found = True
                  if i < len(self.data)-1:
                      self.data[i+1] = value
                  break
          if not found:
              self.data.append(keyword)
              self.data.append(value)