从Python中的列表中提取随机子列表

use*_*093 8 python random sublist

我有一个python字典如下:

{'APPLE_PROVIDERS' : ["some", "provider","can","be", "null"],
  ....
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是从密钥的列表(这是一个值)中获取一个随机子列表.不仅仅是一个元素,而是一个完全随机的子列表.这是我尝试过的:

a_list = a_dict.get('APPLE_PROVIDERS', "")
for item in a_list[randrange(0,len(a_list)) : randrange(0,len(a_list))]:
  ...do something.. 
Run Code Online (Sandbox Code Playgroud)

这件事有两个问题:

  1. 如果列表为空,或者dict查找失败,程序将失败,因为randrange有(0,0)作为参数,这会导致错误

  2. 很多时候,两个randrange()调用都会生成相同的数字,尤其是当列表很小时.这将返回一个空列表.例如a_list [5:5]

那么,处理上述案例的随机子列表的最佳方法是什么?另外,我不关心订购.一切正常.每次for循环开始时,我只想要一个完全随机的子列表0,1 ...直到len(a_list)元素.

如果列表可以在其他一些可以容纳类似元素的数据结构中进行更改,那么这对我也有用.

Ign*_*ams 18

取样吧.

>>> random.sample(["some", "provider", "can", "be", "null"], 3)
['some', 'can', 'provider']
>>> random.sample(["some", "provider", "can", "be", "null"], 3)
['can', 'null', 'provider']
>>> random.sample(["some", "provider", "can", "be", "null"], 3)
['null', 'some', 'provider']
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 7

>>> from random import randint
>>> left = randint(0, len(L))
>>> right = randint(left, len(L))
>>> L[left:right]
['null']
Run Code Online (Sandbox Code Playgroud)

如果您不希望出现空列表

>>> left = randint(0, len(L) - 1)
>>> right = randint(left + 1, len(L))
Run Code Online (Sandbox Code Playgroud)