繁体   English   中英

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

[英]How can I split a list in two unique lists in Python?

嗨,我有一个列表如下:listt = ['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))

尝试这个:

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'])

使用[:]从列表中切出所有成员,基本上将所有内容复制到一个新对象中。 另外,也可以使用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

然后就可以修改原始列表,而无需修改第firstsecond列表。

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

无需对列表进行三次抽样(这总是会为您提供三个独立的结果,其中可以为单个列表选择多个成员),您可以将列表随机播放一次 ,然后将其分为三个部分。 这样,您将获得三个不会共享任何项目的随机子集:

>>> 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']

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

如果对每个列表中的项无关紧要,那么最好将列表分为三部分:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM