有时我的布景是有序的,有时不是(Python)

2024-09-26 22:08:22 发布

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

所以我知道一个集合应该是一个无序的列表。我试图做一些我自己的编码和结束了一个奇怪的事情。我的设置有时会从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%愿意学习。谢谢你的时间!你知道吗


Tags: number编码列表数字randomminmaxint
2条回答

集合是通过哈希实现实现的。整数的散列就是整数。要确定将数字放入表中的位置,将使用整数的余数除以表大小。表的大小从8开始,因此数字0到7将按顺序放置在它们自己的插槽中,但是8将放置在0插槽中。如果将数字1到4和8添加到一个空集中,它将显示为:

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

当添加5时,表已超过2/3rds full。这时桌子的尺寸增加到32个。创建新表时,现有表将重新填充到新表中。现在它显示为:

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

在您的示例中,只要您添加了足够的条目以使表有128个条目,那么它们都将按顺序放置在表中各自的箱子中。如果您只添加了足够的条目,使表有32个槽,但您使用的数字最多为100,那么这些条目不一定是有序的。你知道吗

set的文档说它是an unordered collection时,这只意味着不能对集合中的元素采用特定的顺序。集合可以选择它用来保存数据的内部表示形式,当您请求元素时,它们可能会以任何顺序返回。在某些情况下,它们被排序的事实可能意味着集合选择以排序的方式存储元素。你知道吗

集合可以根据集合中元素的数量等因素在性能和空间之间做出权衡决定。例如,它可以将小集合存储在列表中,而将大集合存储在树中。从树中检索元素的最自然的方法是按顺序排序,所以这就是可能发生的情况。你知道吗

另请参见Can Python's set absence of ordering be considered random order?以获取有关此的更多信息。你知道吗

相关问题 更多 >

    热门问题