列表中的唯一派系(Python)

2024-09-28 20:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份清单,清单如下:

cliques = [ [1,9,5], [3,5,4], [10,7,0], [2,7,5], [6,11], [6,5,4], [3,1], [11, 0]]

我从列表中随机选择一项:

rand_clique = numpy.random.choice(cliques)

例如cliques[2] = [10,7,0] ,我想在Cliques元素中创建一个具有唯一值的新列表。 因此,我得到了一个列表:

unique_cliques = [[10,7,0], [1,9,5], [6,11]]

我写的代码,但我认为它可以优化得更好,我如何才能做到这一点

import numpy as np

unique_cliques = []
not_unique_cliques = []

cliques = [[1, 9, 5], [3, 5, 4], [10, 7, 0], [2, 7, 5], [6, 11], [6, 5, 4], [3, 1], [11, 0]]
rand_clique = np.random.choice(cliques)
unique_cliques.append(rand_clique)

for elem in rand_clique:
    not_unique_cliques.append(elem)

for clique in cliques:
    temp = []
    count = 0
    for elem in clique:
        if elem not in not_unique_cliques:
            count += 1
            temp.append(elem)
    if count == len(clique):
        unique_cliques.append(clique)
        not_unique_cliques = not_unique_cliques + temp

print(rand_clique)
print(unique_cliques)

如果程序可以不按顺序取元素,但每次取一个满足上述条件的随机元素,那就太好了


Tags: innumpy元素列表forcountnotrandom
3条回答

我尽了最大努力:

import numpy as np

unique_cliques = []
not_unique_cliques = []

cliques = [[1, 9, 5], [3, 5, 4], [10, 7, 0], [2, 7, 5], [6, 11], [6, 5, 4], [3, 1], [11, 0]]
rand_clique = np.random.choice(cliques)
unique_cliques.append(rand_clique)
not_unique_cliques.extend(rand_clique)

for clique in cliques:
    if len(set(clique)&set(not_unique_cliques))==0:
        unique_cliques.append(clique)
        not_unique_cliques.extend(clique)


print(rand_clique)
print(unique_cliques)

您可以通过过滤看到的值,从无序版本的派系列表中构建列表:

import random
cliques = [[1, 9, 5], [3, 5, 4], [10, 7, 0], [2, 7, 5], [6, 11], [6, 5, 4], [3, 1], [11, 0]]

unique_cliques = []
seen = set()
for clique in random.sample(cliques,len(cliques)):
    if seen.intersection(clique): continue
    seen.update(clique)
    unique_cliques.append(clique)

print(unique_cliques) # your results will vary

# [[6, 11], [3, 5, 4], [10, 7, 0]]

这不仅会随机化第一个子列表,还会随机化后续子列表

使用集合应该提高效率:

import random
cliques = [[1, 9, 5], [3, 5, 4], [10, 7, 0], [2, 7, 5], [6, 11], [6, 5, 4], [3, 1], [11, 0]]
rand_clique = random.choice(cliques)
unique_cliques = [rand_clique]
nonunique_elements = set(rand_clique)
for clique in cliques:
   if not set(clique).intersection(nonunique_elements):
       unique_cliques.append(clique)
       nonunique_elements.update(clique)
print(unique_cliques)

顺便说一句,请注意,结果因random.choice选择的集团而异

相关问题 更多 >