【发布时间】:2015-09-17 18:36:54
【问题描述】:
我正在运行自己的小实验,需要一些代码方面的帮助。
我正在创建一个列表,该列表在索引位置 0-99 中存储 100 个集合,每个存储的集合都存储范围从 1 到 100 的随机数,这些随机数来自包含 100 个数字的随机生成的列表。
对于每组数字,我使用 set() 命令过滤掉所有重复项,然后再将该组附加到列表中……所以基本上我有一个包含 1-100 之间数字的 100 个集合的列表。
我编写了一些代码来检查每个集合的长度 - 我注意到我的集合的长度通常为 60-69 个元素!基本上,所有数字的 1/3 是重复的。
代码:
from random import randint
sets = []
#Generate list containing 100 sets of sets.
#sets contain numbers between 1 and 100 and no duplicates.
for i in range(0, 100):
nums = []
for x in range(1, 101):
nums.append(randint(1, 100))
sets.append(set(nums))
#print sizes of each set
for i in range(0, len(sets)):
print(len(sets[i]))
#I now want to create a final set
#using the data stored within all sets to
#see if there is any unique value.
所以这是我无法理解的一点......我想看看所有这些集合中是否有唯一的数字!我想不通的是我该怎么做。
我知道如果它们存储在自己的变量中,我可以直接将一个集合与另一个集合进行比较......但我无法找到一种有效的方法来循环遍历集合列表并将它们全部比较以创建一个新的我希望它可能只包含一个唯一值!
我在文档中看到过这段代码...
s.symmetric_difference_update(t)
但我不知道如何将它应用到我的代码中。
任何帮助将不胜感激!
【问题讨论】:
-
“唯一编号”是什么意思?你的意思是一个数字出现在所有集合中,或者一个数字是一个集合但不是任何其他集合,或者一个数字不在任何集合中?
-
这个实验是在开始玩集合时开始的,并注意到当我循环 100 次并生成 1-100 之间的随机数时,我通常会在集合中留下大约 60-69 个唯一值.我认为看看我是否可以生成 100 个集合并将它们相互比较会很有趣。我想看看是否有一种方法可以轻松地将每个集合存储在列表中,然后遍历列表,查看每个集合以找到唯一的数字。显然,只有 1-100 范围内的几率非常低......但我想我会尝试!
-
您指的是什么“唯一编号”?如何将这些集合相互比较?
-
我想将所有集合减少到 1 个集合,其中包含仅出现在单个集合中的任何数字。拥有 1-100 范围内的任何数字的可能性很低,但实际上可能会出现一个数字仅生成一次的奇数时间。 - 我可以简单地使用字典来保持计数,但我想知道是否有一种方法可以使用集合来删除跨多个集合发生的所有重复项。我知道 set(list_name) 会减少列表中的所有重复项......但我想做一些类似 set(list_ contains_sets) 的事情来产生最终的集合。这有意义吗??