【问题标题】:Random Sample with remove from List从列表中删除的随机样本
【发布时间】:2013-05-04 20:05:14
【问题描述】:

我的列表中有如下数据:

L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)]

我需要随机采样 2 的大小,所以我想使用:

import random
t1 = random.sample(set(L),2)

现在 T1 是随机拉取值的列表,但我想从初始列表中删除那些从初始列表中随机拉取的值。我可以做一个线性 for 循环,但对于我试图为更大的列表执行此操作的任务。所以运行时间会很长!

有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: python list random


    【解决方案1】:
    t1 = [L.pop(random.randrange(len(L))) for _ in xrange(2)]
    

    不会改变L中剩余元素的顺序。

    【讨论】:

    • 不知道的朋友,在Python3中xrange已经被range代替了。
    【解决方案2】:

    一种选择是随机排列列表,然后弹出前两个元素。

    import random
    L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)]
    random.shuffle(L)
    t1 = L[0:2]
    

    【讨论】:

    • -1 random.shuffle 是一个就地函数,因此返回 None。这个答案给出:TypeError: 'NoneType' object has no attribute '__getitem__'
    • @jamylak 抱歉,我已更正错误。感谢您的反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多