有时候,我的一套散发出来下令有时不是(蟒蛇)(Sometimes my set comes out

2019-10-19 21:59发布

所以,我知道,一组被认为是一个无序列表。 我试图做一些我自己的编码,结束了一个奇怪的事情发生。 我会集在为了有时会从1 - 100(使用数量较多时),当我使用一个较小的数字,你会留无序。 这是为什么?

#Steps:
#1) Take a number value for total random numbers in 1-100
#2) Put those numbers into a set (which will remove duplicates)
#3) Print that set and the total number of random numbers

import random

randomnums = 0

Min = int(1)
Max = int(100)
print('How many random numbers would you like?')
numsneeded = int(input('Please enter a number.            '))
print("\n" * 25)

s = set()

while (randomnums < numsneeded):
    number = random.randint(Min, Max)
    s.add(number)
    randomnums = randomnums + 1

print s
print len(s)

如果任何人有清理我的代码的指针,我100%愿意学习。 感谢您的时间!

Answer 1:

当文档set说,这是一个无序的集合 ,它只是意味着你可以假定在集合中的元素没有特定的顺序。 该组可以选择它所使用的内部表示来保存数据,而当你问的元素,他们可能会回来以任何顺序可言。 它们在某些情况下,排序的事实可能意味着设置已经选择来存储您的元素排序的方式。

该组可以使性能和取决于多种因素空间之间权衡决定,例如集合中的元素的数量。 例如,它可以小套在列表中,但更大的存储组中的一棵树。 从树检索元素最自然的方式是按排序顺序,所以这是可能发生的事情给你。

参见可以Python的设定离座次序来考虑随机顺序? 有关此进一步信息。



Answer 2:

集合与哈希实现来实现。 一个整数的散列仅仅是整数。 为了确定在何处放置的数目在表中的整数的余数在由所述表的大小被使用。 该表的大小为8启动,因此数字0到7将被放置在其自己的时隙中的顺序,但8将被放置在0时隙。 如果1添加号码4和8成空集将显示为:

set([8,1,2,3,4])

什么时候加5的情况是,该表已超过2 /三分之二满。 在这一点上表的尺寸增大到32时创建新表中的现有表重新填充到新表。 现在,它显示:

set([1,2,3,4,5,8])

在只要你添加足够的条目的例子,导致表有128个条目,那么它们都将被放置在表中自己垃圾箱秩序。 如果你只添加了足够的条目,该表有32个插槽,但是你使用人数达到100项不一定会秩序。



文章来源: Sometimes my set comes out ordered and sometimes not (Python)