len(set())的解释

时间:2018-01-03 20:53:09

标签: python

快速提问,我正在用Python编写一个小程序,并且正在寻找一种方法来制定条件,只允许输入4个数字,如果输入具有我想要的相同len并确保所有数字在它是独一无二的。 在网上搜索了一下之后,我发现有几个人给出了相同的解决方案,在我的情况下是len(set(input)) == size(我的号码的大小)。

效果很好,但我不明白它是如何运作的,我想知道。 我也尝试从中移除len并且它仍然有用,所以我几乎无法知道这一小段代码中每个东西的影响。

所以即使它允许我创建一个条件,确保4个数字中的每一个都是唯一的,如果有人可以向我解释它是如何工作的,我会很高兴。

提前致谢。

PS:如果有人想知道它是什么我正在练习制作我自己的Cows&公牛。因此,使用random.sample给出一个随机数,然后用户必须尝试猜测该数字是什么。我提到的条件是在用户输入时使用的。

2 个答案:

答案 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中,每个输入都是一个字符串,可以转换为字符列表。将列表转换为集合时,它会保留唯一元素。

因此,当您的代码将数字字符串转换为集合时,它只保留唯一数字。然后,当您找到长度时,它将返回唯一数字的数量。

相关问题