code: def join(
          self,
          words,
          sep=None,
          sep_spaced=True,
          final_sep=None,
          conj="and",
          conj_spaced=True,
      ):
          
          if not words:
              return ""
          if len(words) == 1:
              return words[0]
  
          if conj_spaced:
              if conj == "":
                  conj = " "
              else:
                  conj = " %s " % conj
  
          if len(words) == 2:
              return "{}{}{}".format(words[0], conj, words[1])
  
          if sep is None:
              if "," in "".join(words):
                  sep = ";"
              else:
                  sep = ","
          if final_sep is None:
              final_sep = sep
  
          final_sep = "{}{}".format(final_sep, conj)
  
          if sep_spaced:
              sep += " "
  
          return "{}{}{}".format(sep.join(words[0:-1]), final_sep, words[-1])
docs: Join words into a list.
  
          e.g. join(['ant', 'bee', 'fly']) returns 'ant, bee, and fly'
  
          options:
          conj: replacement for 'and'
          sep: separator. default ',', unless ',' is in the list then ';'
          final_sep: final separator. default ',', unless ',' is in the list then ';'
          conj_spaced: boolean. Should conj have spaces around it