【发布时间】:2020-01-13 11:16:19
【问题描述】:
例 1:A = [0 5 27 6 13 28 100 45 10 79] 令 f(x) 表示 x 在 100 次实验中被选中的次数。 f(100) > f(79) > f(45) > f(28) > f(27) > f(13) > f(10) > f(6) > f(5) > f(0)
我的代码:
def pick_a_number_from_list(A,l):
Sum = 0
#l = len(A)
for i in range(l):
Sum+=A[i]
A_dash = []
for i in range(l):
b=A[i]/Sum
A_dash.append(b)
#print(A_dash)
series = pd.Series(A_dash)
cumsum = series.cumsum(skipna=False)
#print(cumsum[9])
sample_value = uniform(0.0,1.0)
r = sample_value
print(r)
#for i in range(l):
if r<cumsum[1]:
return 1
elif r>cumsum[1] and r <cumsum[2]:
return 2
elif r<cumsum[3]:
return 3
elif r<cumsum[4]:
return 4
elif r<cumsum[5]:
return 5
elif r<cumsum[6]:
return 6
elif r<cumsum[7]:
return 7
elif r<cumsum[8]:
return 8
elif r<cumsum[9]:
return 9
def sampling_based_on_magnitued():
A = [0,5,27,6,13,28,100,45,10,79]
n = len(A)
#for i in range(1,10):
num = pick_a_number_from_list(A,n)
print(A[num])
sampling_based_on_magnitued()
在 mu 代码中,我使用了多个 if else 语句,因为它是硬编码的 我可以通过 o/p 直到列表中的 10 个元素。 我想让我的代码对于列表中的任何值都是动态的。
在我的代码中,我将其限制为 n=10
请告诉我如何正确使用 for 循环替换所有 if - elseif 语句的通用代码
【问题讨论】:
-
你必须有一个
for循环吗?如果是这样,为什么?如果您不需要for循环,则可以在需要单个样本时使用random.choices(A, weights=A),如果需要(例如)100 个样本,则可以使用random.choices(A, weights=A, k=100)。但请注意,虽然f(6) > f(5)经常为真,但它仍受随机性影响(就像所有其他比较一样)。 -
没有限制。我想要实现的唯一条件是,而不是仅限于 size=10 的列表。大小应该是动态的,可能是 n=15。因此,无论 n 的值如何,我的代码都应该足够聪明,可以做同样的事情。请分享你的想法
-
总是顺序值吗?
标签: python-3.x pandas random