快速提问,我正在用Python编写一个小程序,并且正在寻找一种方法来制定条件,只允许输入4个数字,如果输入具有我想要的相同len并确保所有数字在它是独一无二的。
在网上搜索了一下之后,我发现有几个人给出了相同的解决方案,在我的情况下是len(set(input)) == size
(我的号码的大小)。
效果很好,但我不明白它是如何运作的,我想知道。
我也尝试从中移除len
并且它仍然有用,所以我几乎无法知道这一小段代码中每个东西的影响。
所以即使它允许我创建一个条件,确保4个数字中的每一个都是唯一的,如果有人可以向我解释它是如何工作的,我会很高兴。
提前致谢。
PS:如果有人想知道它是什么我正在练习制作我自己的Cows&公牛。因此,使用random.sample给出一个随机数,然后用户必须尝试猜测该数字是什么。我提到的条件是在用户输入时使用的。答案 0 :(得分:5)
set
是以下数据结构:
构建和操作唯一元素的无序集合。
这些集合也必须是 hashable 。但我们很幸运:字符串和字符都是可以删除的。
关键是如果我们构造一个集合形式set(['1','4','1','5','2'])
,它将构建一个唯一元素的集合。因此,在此处添加'1'
两次,没有任何区别,结果是set(['1', '4', '5', '2'])
(或更方便地编写{'1', '4', '5', '2'}
)。使用len(..)
,我们可以获得集合的 size 。因此,该集合的大小是输入的唯一字符的数量。
因此,如果我们写len(set(some_string))
,我们将首先将字符串转换为集合。这是可能的,因为字符串是字符的可迭代。因此Python将字符串视为有序的字符集合。 'abc'
是'a'
,'b'
和'c'
的集合。因此,每个数字都被视为一个元素并添加到集合中。
但是第二次添加相同的数字,没有任何效果。这意味着我们最终得到一个集合,其中每个数字都被添加一次。然后计算len(..)
我们获得唯一位数。然后我们可以将该数字与给定数字进行比较。
答案 1 :(得分:1)
在Python中,每个输入都是一个字符串,可以转换为字符列表。将列表转换为集合时,它会保留唯一元素。
因此,当您的代码将数字字符串转换为集合时,它只保留唯一数字。然后,当您找到长度时,它将返回唯一数字的数量。