Py学习  »  Python

如何在Python中将两个唯一列表分割成一个列表?

moemous • 6 年前 • 2063 次点击  

嗨,我有一个清单如下: 列表t=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'] 15名成员。

我想把它变成3个列表,我用了这个代码,但我想要唯一的列表。这给了我3个有共同成员的名单。

import random

listt = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
print(random.sample(listt,5))
print(random.sample(listt,5))
print(random.sample(listt,5))
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43992
文章 [ 4 ]  |  最新文章 6 年前
poke
Reply   •   1 楼
poke    7 年前

不必对列表进行三次采样(这将始终为您提供三个独立的结果,其中可以为多个列表选择单个成员),您只需对列表进行无序排列即可。 一旦 然后分成三部分。这样,您将得到三个不共享任何项的随机子集:

>>> random.shuffle(listt)
>>> list[0:5]
>>> listt[0:5]
['b', 'a', 'f', 'e', 'h']
>>> listt[5:10]
['c', 'm', 'g', 'j', 'o']
>>> listt[10:15]
['d', 'l', 'i', 'n', 'k']

注意 random.shuffle 将重新排列列表,以便修改原始列表。如果不想修改原始列表,应该先复制一份。

如果您的列表大于期望的结果集,那么当然也可以对列表进行采样。 一旦 使用组合结果大小,然后相应地拆分结果:

>>> sample = random.sample(listt, 5 * 3)
>>> sample[0:5]
['h', 'm', 'i', 'k', 'd']
>>> sample[5:10]
['a', 'b', 'o', 'j', 'n']
>>> sample[10:15]
['c', 'l', 'f', 'e', 'g']

此解决方案还将避免修改原始列表,因此如果希望保持原样,则不需要副本。

KeyWeeUsr
Reply   •   2 楼
KeyWeeUsr    7 年前

使用 [:] 切片用 全部的 列表中的成员,基本上将所有内容复制到一个新对象中。或者只是使用 list(<list>) 也有哪些副本:

print(random.sample(listt[:],5))

如果您只想洗牌一次,请将洗牌结果存储到变量中,然后复制:

output = random.sample(listt,5)
first = output[:]
second = output[:]
print(first is second, first is output)  # False, False

然后可以修改原始列表而不需要 first second 正在修改。

对于可能要使用的嵌套列表 copy.deepcopy() .

inspectorG4dget
Reply   •   3 楼
inspectorG4dget    7 年前

如果在每个列表中哪些项对您来说无关紧要,那么最好将列表分成三部分:

In [23]: L =  ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']                                                                                                     

In [24]: size = len(L)                                                                                                                                                          

In [25]: L[:size//3]                                                                                                                                                            
Out[25]: ['a', 'b', 'c', 'd', 'e']

In [26]: L[size//3:2*size//3]                                                                                                                                                   
Out[26]: ['f', 'g', 'h', 'i', 'j']

In [27]: L[2*size//3:]                                                                                                                                                          
Out[27]: ['k', 'l', 'm', 'n', 'o']

如果希望它们具有原始列表中的随机元素,则只需首先对输入进行无序排列:

random.shuffle(L)
bananafish
Reply   •   4 楼
bananafish    7 年前

试试这个:

from random import shuffle


def randomise():
    listt = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
    shuffle(listt)
    return listt[:5], listt[5:10], listt[10:]

print(randomise())

这将打印(例如,因为它是随机的):

(['i', 'k', 'c', 'b', 'a'], ['d', 'j', 'h', 'n', 'f'], ['e', 'l', 'o', 'g', 'm'])