1

我是python和编程的新手,所以提前道歉。我知道 remove()、append()、len() 和 rand.rang(或其他任何东西),我相信我需要这些工具,但我不清楚如何编写代码。

我想做的是,在循环或以其他方式访问 List_A 时,在 List_A 中随机选择一个索引,从 List_A 中删除 selected_index,然后将 selected_index 附加到 List_B。

我想从列表 A 中随机删除最多一定百分比(或实数,如果这是不可能的话)的项目。

有任何想法吗??我描述的可能吗?

4

4 回答 4

11

如果您不关心输入列表的顺序,我会对其进行洗牌,然后n从该列表中删除项目,将其添加到另一个列表中:

from random import shuffle

def remove_percentage(list_a, percentage):
    shuffle(list_a)
    count = int(len(list_a) * percentage)
    if not count: return []  # edge case, no elements removed
    list_a[-count:], list_b = [], list_a[-count:]
    return list_b

其中是和percentage之间的浮点值。0.01.0

演示:

>>> list_a = range(100)
>>> list_b = remove_percentage(list_a, 0.25)
>>> len(list_a), len(list_b)
(75, 25)
>>> list_b
[1, 94, 13, 81, 23, 84, 41, 92, 74, 82, 42, 28, 75, 33, 35, 62, 2, 58, 90, 52, 96, 68, 72, 73, 47]
于 2013-05-30T23:43:51.347 回答
1

如果您可以在 中找到i某个元素的随机索引listA,则可以使用以下命令轻松地将其从 A 移动到 B:

listB.append(listA.pop(i))
于 2013-05-30T23:43:19.830 回答
1

1)计算要删除多少元素,调用它k

2)random.randrange(len(listA))将返回一个介于 0 和 len(listA)-1 之间的随机数,例如可以在 listA 中使用的随机索引。

3) 抓取该索引处的元素,将其从 listA 中删除,并将其附加到 listB。

4)重复,直到您删除k了元素。

于 2013-05-30T23:43:21.723 回答
1
>>> lis = range(100)
>>> per = .30 
>>> no_of_items = int( len(lis) * per) #number of items in 30 percent 
>>> lis_b = []
>>> for _ in xrange(no_of_items):
       ind = random.randint(0,len(lis)-1)  #selects a random index value
       lis_b.append(lis.pop(ind))     #pop the item at that index and append to lis_b 
...     
>>> lis_b
[73, 32, 82, 68, 90, 19, 3, 49, 21, 17, 30, 75, 1, 31, 80, 48, 38, 18, 99, 98, 4, 20, 33, 29, 66, 41, 64, 26, 77, 95]
于 2013-05-30T23:47:03.597 回答