我的问题是在Python中创建一个半随机的字母列表。我想要20%的时间,这封信与以前的2个字母相同。
我不想只是随意的,因为如果我这样做,那么20%的时间内n-2是相同的字母就不会发生。
我正在考虑创建一个包含我想要的字母的第一个列表,然后创建一个新列表,它将从第一个列表中随机获取该字母,但我不知道如何添加20%的约束?
最后我需要的时间恰好是20%
一个 乙 乙 C 的乙 一个 一个 C 的 A
就像那样......例如,你有提示吗?
答案 0 :(得分:0)
这个怎么样:
import random
import string
alpha = string.ascii_uppercase
my_list = [random.choice(alpha) for _ in range(2)] # initializing; first two elements have to be random
n = 50 # select the length of the list; note that 2 elements are already inside!
for i in range(n):
if random.random() < 0.2: # 20% of the time repeat a letter
my_list.append(my_list[len(my_list)-2])
else:
my_list.append(random.choice(alpha)) # 80% of the time, get a new
print(my_list) # -> ['O', 'M', 'O', 'F', 'B', 'F', 'S', 'G', ...
# ^ ^
并检查:
j = 0
for i, item in enumerate(my_list[2:], 2):
if item == my_list[i-2]:
j += 1
print(j/len(my_list)) # I got 23%. The bigger the list get's, the closer to 20% you'll get
答案 1 :(得分:0)
试试这个:
target
在这里,我只是决定从现有序列中选择一个新的字母或者从现有序列中获取2次字母(字符串target
)。当然,我必须考虑File "/home/david/Django-Development/csruipa/ruth/urls.py", line 3, in <module>
from ruth import views
File "/home/david/Django-Development/csruipa/ruth/views.py", line 4
def index(request)
^
SyntaxError: invalid syntax enter code here
少于2个字母时的情况,否则在2次之前无需选择。
答案 2 :(得分:0)
您可以尝试这样做:创建随机列表并获取不符合条件的索引。从那些中,选择随机指数以满足条件减去已经满足它的指数的数量。将这些指数设置为先前的元素两个指数。
lst = [random.randint(1, 10) for _ in range(20)]
not_same = [i for i in range(2, len(lst)) if i not in same]
num_same = len(lst) - len(not_same)
make_same = random.sample(not_same, len(lst)//5 - num_same)
for i in make_same:
lst[i] = lst[i-2]
但请注意,有可能会略微减少或稍微超过20%。如果是您的列表为[1,2,3,4,1]
,并且您将3
设置为1
,您获得两个“相同”元素而不是一个,如果列表为[1,2,3,4,3]
并且您设置了第一个3
{1}}到1
,你获得一个而你失去一个。