python随机从列表抽取元素并按顺序生成新列表

刚开始做这个的时候觉得很容易,但是当随机把数据抽取出来之后,还需要按顺序放回新的列表这一点就比较难了。

最开始想的是生成一个index的列表,每次随机抽一个index,然后取出的就是list[index]这个元素,然后再按index这个数将其放回新的列表中,本以为这样就万无一失了实际上是我想多了hhhhh,这样生成的新的列表元素顺序并不是按照在原有列表的顺序来排的,思前想后想了半天,用这个方法来解决了,可能不够好,还有些浪费资源,但是目前我所能想到的就是这么多,并且我处理的数据也不多,感觉这个方法完全够用了。

基于我没有在网上看到一些比较合适的方法,因此把自己的方法贴出来,欢迎指正。

import random
list = ['a', 'b', 'c', 'd', 'e', 'f']
list1 = ['']*len(list)
index = [i for i in range(len(list))]
while len([i for i in list1 if i != '']) < 3:
    k = random.choice(index)
    list1[k] = list[k]
    index.remove(k)
    if len(index) == 0:
        break
while '' in list1:
    list1.remove('')
print(list1)

主旨思想是先生成一个和原列表一样长的空列表,
生成空列表的想法是参考random库中的sample函数源码来的。
然后将原列表中的元素抽出来按原有顺序放入新的列表,最后如果有空元素存在的话,删除。

大概就是这么一个办法,不过我始终觉得这办法还是太笨。但是emmmm能用就行了hhh

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值