+ 3

how to only using seed once for the entire program ?

so i did a test https://code.sololearn.com/ckbqiyArECcg/?ref=app is there any efficent way other than calling seed each time i need it ? i have several random number that i need to get based on the seed given. something like what we can toggle ourself, from using and not using seed.

18th Sep 2019, 7:04 AM
Taste
Taste - avatar
13 Réponses
+ 1
its soo messy like really messy, but the flow goes like this. i have some lists listA listB listC then i generate a seed, by using randint xseed = randint(100,1000) then i shuffle the list using that seed. what i looking for is to only use seed() once but will affect all the shuffle operation onwards. my current code looks like seed(xseed) shuffle(listA) #dosomething else seed(xseed) shuffle(listB) #dosomething else ... i looking for a solution like this seed_once(xseed) shuffle(listA) #dosomething else shuffle(listB) #but still affected from previous seed #dosomething else ... reset_seed() #to put back the normal randomizer as why i need it is, seed() is pretty small line, when working on large source code i can easily miss them and mess with the result.
18th Sep 2019, 7:39 AM
Taste
Taste - avatar
0
Can you eplain what you want to do exactly ?
18th Sep 2019, 7:11 AM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
as in my code i want the output looks like the second one. but only using seed once like the first one
18th Sep 2019, 7:13 AM
Taste
Taste - avatar
0
Then why din't you create just one sample, and print it 10 times ? I'm confused, why do you want to print the same sample 10 times ?
18th Sep 2019, 7:21 AM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
its just a simplified case, the one i working on right now consist of a bunch of lists.
18th Sep 2019, 7:26 AM
Taste
Taste - avatar
0
Then can you share the one you are working on ? Most people will probably wonder the same thing, cause simplfied case means simplfied solution, which is not what you're looking for obviously
18th Sep 2019, 7:27 AM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
Generators for random numbers usually have an internal state that you can retrieve and set. In case of Python, that would be the getstate() and setstate() function: https://docs.python.org/3/library/random.html Using that state, you could do it the following way: https://code.sololearn.com/c4mOb369U3O1/?ref=app I don't really know Python, but this is a common thing in many languages, so this would be a possibility.
18th Sep 2019, 7:29 AM
Shadow
Shadow - avatar
0
Iam not sure if I fully understand what you want to do, but I guess you want to shuffle all the lists using the seed or 'order', if that is the case, why don't you shuffle the lines, and then remake the lists ? It will look like this (assuming all the list have the same lenght): lists = [listA, listB, listC] L = [[lst[index] for lst in lists] for index in range(len(lists[0]))] r = random.randint(100, 1000) # useless, remove this line seed(r) # useless, remove this line shuffle(L) result = [[lst[index] for lst in L] for index in range(len(L[0]))] But as you can see here, the random.seed is useless since it's generated from a ranfom number, so just remove it, I hope this is the result you want
18th Sep 2019, 12:31 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
by using seed i can expect the result of random. so the seed are act kinda like a key. i store the seed somewhere else to be used later in the program.
18th Sep 2019, 1:44 PM
Taste
Taste - avatar
0
Then use seed
18th Sep 2019, 2:47 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
so back to my original question. seed only affect once, i need to call it again and again each time i need it. my question is there any way use seed without calling seed() over and over again
18th Sep 2019, 2:51 PM
Taste
Taste - avatar
0
No there isn't, because seed is a sequence, there is no other way to reset that sequence without using another intermediate function
18th Sep 2019, 3:39 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
0
ah thx then
18th Sep 2019, 3:41 PM
Taste
Taste - avatar