Python 是否可以从列表中随机*删除*一定百分比/数量的项目,然后*附加*到另一个列表中?

Python 是否可以从列表中随机*删除*一定百分比/数量的项目,然后*附加*到另一个列表中?,python,python-2.7,random,Python,Python 2.7,Random,我不熟悉python和编程,所以请提前道歉。我知道remove、append、len和rand.rang之类的工具,我相信我需要这些工具,但我不清楚如何编写代码 我想做的是,在循环或以其他方式访问列表A时,在列表A中随机选择一个索引,从列表A中删除所选的索引,然后将所选的索引附加到列表B 我想随机删除只有一个特定的百分比或真实的数字,如果这是不可能的项目从列表a 有什么想法吗??我所描述的可能吗?如果您可以在列表a中找到某个元素的随机索引I,那么您可以使用以下方法轻松地将其从a移动到B: lis

我不熟悉python和编程,所以请提前道歉。我知道remove、append、len和rand.rang之类的工具,我相信我需要这些工具,但我不清楚如何编写代码

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

我想随机删除只有一个特定的百分比或真实的数字,如果这是不可能的项目从列表a


有什么想法吗??我所描述的可能吗?

如果您可以在列表a中找到某个元素的随机索引I,那么您可以使用以下方法轻松地将其从a移动到B:

listB.append(listA.pop(i))

如果可以在列表a中找到某个元素的随机索引i,则可以使用以下方法轻松地将其从a移动到B:

listB.append(listA.pop(i))

1计算要删除的元素数,称为k

2 random.randrangelenlistA将返回一个介于0和lenlistA-1之间的随机数,包括0和lenlistA-1,例如,可以在listA中使用的随机索引

3获取该索引处的元素,将其从listA中删除,然后将其附加到listB


4重复此操作,直到删除了k个元素。

1计算要删除的元素数,称为k

2 random.randrangelenlistA将返回一个介于0和lenlistA-1之间的随机数,包括0和lenlistA-1,例如,可以在listA中使用的随机索引

3获取该索引处的元素,将其从listA中删除,然后将其附加到listB


4重复此操作,直到删除了k个元素。

如果您不关心输入列表的顺序,我会将其洗牌,然后从该列表中删除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
其中,百分比是介于0.0和1.0之间的浮点值

演示:


如果您不关心输入列表的顺序,我会将其洗牌,然后从该列表中删除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
其中,百分比是介于0.0和1.0之间的浮点值

演示:


你试过什么?你的密码在哪里?如果你真的不能开始,我建议你查阅一些基本教程-StackOverflow给你一个解决方案不会帮助你学习。这个问题的唯一有效答案是“是”,你尝试了什么?你的密码在哪里?如果你真的不能开始这个问题,我建议你查阅一些基本教程-StackOverflow给你一个解决方案不会帮助你学习。这个问题的唯一有效答案是“是”。你知道popi是否会永远从列表中删除该项吗?我以为pop只返回了最后一个项目,除非指定,但返回==在该上下文中删除?@BeeSmears:Try或在交互控制台上尝试。Python的优势之一是它是如此的交互式;如果你不利用这一点,你就错过了机会。@PaulMcGuire:什么是交互式控制台?那是贝壳吗?我在谷歌上搜索过这个词,但没有找到任何能清楚解释它是什么以及如何使用它的东西——根据你的描述,我很想使用它。你能推荐一个网站吗,或者只是简单地解释一下?谢谢您的任何想法/帮助。@BeeSmears-打开一个shell窗口,在这个窗口中,您可以在Windows上键入“dir”或在Linux上键入“ls”等命令,然后键入“python”。这将启动一个交互式解释器会话,您可以使用它来尝试简单的命令。尝试z=listABCDE快速创建一个简单的列表。现在执行z.pop3-将打印字母“D”,因为这是调用pop返回的值。现在,如果您使用的是Python2.x,请键入printz;如果您使用的是Python3.x,请键入printz。D不见了,因为pop删除了它。您知道popi是否永久地从列表A中删除了该项吗?我以为pop只返回了最后一个项目,除非指定,但返回==在该上下文中删除?@BeeSmears:Try或在交互控制台上尝试。Python的优势之一是它是如此的交互式;如果你不利用这一点,你就错过了机会。@PaulMcGuire:什么是交互式控制台?那是贝壳吗?我在谷歌上搜索过这个词,但没有找到任何能清楚解释它是什么以及如何使用它的东西——根据你的描述,我很想使用它。你能推荐一个网站吗,或者只是简单地解释一下?谢谢您的任何想法/帮助。@BeeSmears-打开一个shell窗口,在这个窗口中,您可以在Windows上键入“dir”或在Linux上键入“ls”等命令,然后键入“python”。这将启动一个交互式解释器会话,您可以使用它来尝试简单的命令。尝试z=listABCDE快速创建一个简单的列表。现在执行z.pop3-将打印字母“D”,因为这是调用pop返回的值。现在,如果您使用的是Python2.x,请键入printz;如果您使用的是Python3.x,请键入printz。D不见了,因为爸爸把它拿走了。我试试这个。谢谢你,先生。我试试这个。谢谢你,先生。也许random.randrangelenlis会更简洁。也许random.randrangelenlis会更简洁
更简洁。randinta,b给你一个[a,b]范围内的值,所以b包括在内。这意味着您可以选择超出范围的lenlistA。@Martijn Pieters我想我过去已经被它咬过了:random.randrange不包括端点,就像range一样,您只能传递端点值。random.randrangelenlistA在这里会做得很好。@MartijnPieters是的,也许这就是我想的函数。现已修复。randinta,b为您提供范围[a,b]内的值,因此包含b。这意味着您可以选择超出范围的lenlistA。@Martijn Pieters我想我过去已经被它咬过了:random.randrange不包括端点,就像range一样,您只能传递端点值。random.randrangelenlistA在这里会做得很好。@MartijnPieters是的,也许这就是我想的函数。现在修好了。