如何将列表拆分为 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))
使用 [:]
将 all 成员从列表中切出,基本上将所有内容复制到一个新对象中。或者只需使用 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()
。
试试这个:
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'])
与其对列表进行三次抽样,这将始终为您提供三个独立的结果,其中可能会为多个列表选择单个成员,您可以将列表随机洗牌一次 然后把它分成三部分。这样,您将获得三个不会共享任何项目的随机子集:
>>> 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)
你好,我有一个列表如下: 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))
使用 [:]
将 all 成员从列表中切出,基本上将所有内容复制到一个新对象中。或者只需使用 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()
。
试试这个:
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'])
与其对列表进行三次抽样,这将始终为您提供三个独立的结果,其中可能会为多个列表选择单个成员,您可以将列表随机洗牌一次 然后把它分成三部分。这样,您将获得三个不会共享任何项目的随机子集:
>>> 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)