首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中的唯一类(Python)

列表中的唯一类(Python)
EN

Stack Overflow用户
提问于 2020-04-15 20:27:31
回答 3查看 66关注 0票数 0

我有清单和清单:

代码语言:javascript
复制
cliques = [ [1,9,5], [3,5,4], [10,7,0], [2,7,5], [6,11], [6,5,4], [3,1], [11, 0]]

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

代码语言:javascript
复制
rand_clique = numpy.random.choice(cliques)

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

代码语言:javascript
复制
unique_cliques = [[10,7,0], [1,9,5], [6,11]]

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

代码语言:javascript
复制
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)

如果程序能把元素不按顺序排列,但每次都有一个满足上述条件的随机元素,那就太好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-15 22:05:44

您可以通过过滤所看到的值,从集群列表的洗牌版本中构建列表:

代码语言:javascript
复制
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]]

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

票数 0
EN

Stack Overflow用户

发布于 2020-04-15 20:42:00

我尽了最大努力:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2020-04-15 20:51:20

使用成套设备应提高效率:

代码语言:javascript
复制
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选择了哪个集团,结果是不同的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61238030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档