我想在[1,n]范围内生成2n-1个随机整数,每个元素出现两次,除了随机值,只出现一次.
例如:
n = 3
seq = [1, 2, 3, 1, 3]
Run Code Online (Sandbox Code Playgroud)
在这个例子中,2只出现一次.
我的算法是使用字典,如下所示:
------------- | num |times| | 1 | 2 | | 2 | 1 | | 3 | 2 |
其中键从1到n,值表示键的出现次数.我用两个值填充字典,并将一个随机密钥的值减小为1.
我不确定我是100确定你的目标,但这是一个尝试:
import random as rn
x = range(3)*2 #generate a list where each number appears twice
rn.shuffle(x) #shuffle it
x.pop() #remove one number
Run Code Online (Sandbox Code Playgroud)
结果:
>>> x
[2, 0, 2, 1, 0] #the result is a list where every number appears twice, except for
#one number which was removed at random, also the numbers are
#randomly arranged
Run Code Online (Sandbox Code Playgroud)
编辑:
这是尝试为非常大的n(n那个大小的列表不能存储在你的ram中)这样做.我看不出如何改变整数.但是,我可以随意删除一个.假设您要将列表写入txt文件.
drop = rn.range(0,n) #choose a random integer to drop
with open('my_file.txt','w') as f:
for ind,ele in enumerate(xrange(n)):
if ind == drop: #do not write the element to txt file
pass
else:
f.write(str(ele) + '\n') #write every except for one element to txt file
with open('my_file.txt','a') as f:
for ele in xrange(n):
f.write(str(ele) + '\n') # write every element to txt file
Run Code Online (Sandbox Code Playgroud)
最后我们写了n-1个元素到txt文件两次,1个元素一次,该元素是随机选择的.
对于n = 5,txt文件如下所示:
0
2
3
4
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
在上面的情况中,1只出现一次,每隔一个数字出现两次.