code: def merge_entries_with_common_prefixes(list_, number_of_needed_commons=6):
      
      # first find common entry-sequences
      prefix = None
      lists_to_merge = []
      for entry in list_:
          newPrefix,number = split_string_at_suffix(entry, numbers_into_suffix=True)
          if entry == newPrefix or prefix != newPrefix:
              lists_to_merge.append([])
              prefix = newPrefix
          lists_to_merge[-1].append((entry,newPrefix,number))
  
      # then merge them
      returnvalue = []
      for common_entries in lists_to_merge:
          common_prefix = common_entries[0][1]
          assert all(common_prefix == prefix for entry,prefix,number in common_entries)
          if len(common_entries) <= number_of_needed_commons:
              returnvalue.extend((entry for entry,prefix,number in common_entries))
          else:
              # we use '*' to indicate several entries,
              # it would also be possible to use '[min,max]' from '(n for e,p,n in common_entries)'
              returnvalue.append(common_prefix + '*')
  
      return returnvalue
docs: Returns a list where sequences of post-fixed entries are shortened to their common prefix.
      This might be useful in cases of several similar values,
      where the prefix is identical for several entries.
      If less than 'number_of_needed_commons' are identically prefixed, they are kept unchanged.
      Example: ['test', 'pc1', 'pc2', 'pc3', ... , 'pc10'] -> ['test', 'pc*']