我找到了函数pop()
,它将从列表中删除单个值。但是,我想从列表中删除两个值 - 随机,但两个数字必须相邻。例如,在[1, 2, 3, 4, 5]
列表中,如果我随机选择2
pop()
,我还要删除1
或3
。
我需要存储数字(p和q)以供稍后计算,到目前为止,这是我的代码:
nlist = [1, 2, 3, 4, 5]
shuffle(nlist)
while nlist:
p = nlist.pop(random.randrange(len(nlist)))
#save p and one adjacent value (q) within this loop
#remove p and q from list
答案 0 :(得分:3)
您可以选择def bundle_indicators(indicators_name, values_list, df):
output = pd.DataFrame({k:v for k,v in zip(indicators_name, values_list)},
index=df.index)
return output
df_indicators_new = bundle_indicators(['mavg_fast', 'mavg_med', 'mavg_slow'],
[mavg_fast, mavg_med, mavg_slow],
df_price)
print(df_indicators_new)
# mavg_fast mavg_med mavg_slow
# 0 0.000 0.000000 0.000
# 1 43.925 0.000000 0.000
# 2 44.110 44.006667 0.000
# 3 44.360 44.256667 0.000
# 4 44.720 44.536667 44.292
# 5 44.220 44.330000 44.242
# 6 43.675 44.080000 44.192
# 7 43.860 43.756667 44.142
# 8 44.045 43.963333 44.066
# 9 44.360 44.213333 43.998
# COMPARISON WITH ORIGINAL OUTPUT
print(df_indicators.eq(df_indicators_new))
# mavg_fast mavg_med mavg_slow
# 0 True True True
# 1 True True True
# 2 True True True
# 3 True True True
# 4 True True True
# 5 True True True
# 6 True True True
# 7 True True True
# 8 True True True
# 9 True True True
小于列表长度的一个,然后弹出相同的索引两次:
randrange
答案 1 :(得分:1)
删除元素时需要处理一些边缘情况,即random
是列表中的第一个或最后一个元素。这使用方便的choice
函数while len(nlist) > 1:
# the number to remove
p_index = random.randrange(len(nlist))
if p_index == 0:
q_index = p_index + 1
elif p_index == len(nlist) - 1:
q_index = p_index - 1
else:
q_index = p_index + random.choice([-1, 1])
p, q = nlist[p_index], nlist[q_index]
nlist.pop(p_index)
nlist.pop(q_index)
return p, q
来确定您选择的相邻元素。
registerForm
答案 2 :(得分:0)
您可以尝试这种方法:
from random import randint
nlist = [1, 2, 3, 4, 5]
data=randint(0,len(nlist)-2)
print([j for i,j in enumerate(nlist) if i not in range(data,data+2)])
输出:
#[3, 4, 5]
#[1, 4, 5]
#[1, 2, 5]