随机删除列表中的两个相邻值

时间:2018-03-21 00:33:55

标签: python python-3.x list

我找到了函数pop(),它将从列表中删除单个值。但是,我想从列表中删除两个值 - 随机,但两个数字必须相邻。例如,在[1, 2, 3, 4, 5]列表中,如果我随机选择2 pop(),我还要删除13

我需要存储数字(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

3 个答案:

答案 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]