code: def zipf_random_sample(distr_map, sample_len):
    
    u = np.random.random(sample_len)
    # Random produces values in range [0.0,1.0); even if it is almost
    # improbable(but possible) that it can generate a clear 0.000..0.
    return list(np.searchsorted(distr_map, u))
docs: Helper function: Generate a random Zipf sample of given length.
  
    Args:
      distr_map: list of float, Zipf's distribution over nbr_symbols.
      sample_len: integer, length of sequence to generate.
  
    Returns:
      sample: list of integer, Zipf's random sample over nbr_symbols.