这是一种方法,使用random.randrange 和list.pop(你说你想从original“移动”项目,所以我假设你完成后它应该是空的——如果不是你可以这样做带副本):
>>> import random
>>> original = [1234, 2456, 1245, 5734, 1245, 74512, 13678, 1456, 3926, 1974]
>>> list1 = []
>>> list2 = []
>>> list3 = []
>>> list4 = []
>>> for i, target in enumerate([list4, list3, list2, list1]):
... for _ in range(i+1):
... target.append(original.pop(random.randrange(len(original))))
...
>>> [list1, list2, list3, list4]
[[3926, 1234, 1456, 74512], [13678, 2456, 1245], [5734, 1245], [1974]]
>>> original
[]
请注意,只要您有一堆编号变量(如list1、list2 等),通常将它们列成一个列表会更容易:
>>> original = [1234, 2456, 1245, 5734, 1245, 74512, 13678, 1456, 3926, 1974]
>>> sublists = [[] for _ in range(4)]
>>> for i, s in enumerate(reversed(sublists)):
... for _ in range(i+1):
... s.append(original.pop(random.randrange(len(original))))
...
>>> sublists
[[1456, 1245, 5734, 1245], [13678, 74512, 2456], [1974, 3926], [1234]]
一旦你把你的输出变成了一个列表,你可以把整个事情构建成一个理解:
>>> original = [1234, 2456, 1245, 5734, 1245, 74512, 13678, 1456, 3926, 1974]
>>> [[original.pop(random.randrange(len(original))) for _ in range(i)] for i in range(4, 0, -1)]
[[1234, 74512, 1974, 1456], [13678, 1245, 3926], [2456, 1245], [5734]]
另一种选择是只对列表进行一次随机播放,这样您就可以简单地弹出最后一个元素,而不是每次都选择一个随机元素:
>>> original = [1234, 2456, 1245, 5734, 1245, 74512, 13678, 1456, 3926, 1974]
>>> random.shuffle(original)
>>> [[original.pop() for _ in range(i)] for i in range(4, 0, -1)]
[[2456, 1245, 3926, 1974], [13678, 74512, 1234], [1245, 1456], [5734]]