On Sun, 29 Aug 2021 20:44:53 +0200, joseph pareti <joeparet...@gmail.com> declaimed the following:
>In the code attached below, the A-variant is from somebody else who knows >Python better than I. But I do not like to just use any code without having >a grasp, specifically the line in* bold*, so I wrote the B-variant which >gives the same results. The C-variant is identical to A and is there for >verification: after resetting the seed I expect the same sequence. The >D-variant is closer to the way I code, and it does not work. > > >import random >from random import randint, seed > >def generate_sequence(length, n_unique): >*return [randint(0, n_unique-1) for k in range(length)]* This does NOT ensure length_UNIQUE values. With a bad seed, it could be possible to return length IDENTICAL values. If you really need unique values, I suggest return random.sample(range(n_unique), k=length) which handles both the range of values, and ensures the subset selected is all unique. """ Generate n unique samples (multiple items) from a sequence without repetition. Here, A seq can be a list, set, string, tuple. Sample without replacement. """ > >def generate_sequence_JP(length, n_unique): > LI = [] > for k in range(length): > LI.append(randint(0, n_unique-1)) > return(LI) Again, nothing is checking for UNIQUE values... LI = [] while len(LI) < length: #untested, may need length - 1 ri = randint(0, n_unique-1) if ri not in LI: LI.append(ri) >def generate_sequence_EXPLICIT(length, n_unique): > X =[None] * length > for i in range(length): > X[i] = [randint(0, n_unique-1)] > return X Same -- nothing about UNIQUE values. Prefilling a list with None, just to immediate replace all the values feels "unPythonic". -- Wulfraed Dennis Lee Bieber AF6VN wlfr...@ix.netcom.com http://wlfraed.microdiversity.freeddns.org/ -- https://mail.python.org/mailman/listinfo/python-list