嗨我有问题理解为什么输出是这样的。我理解字符串和列表之间的区别(有一个项目)。但是,我真的不明白这一点,因为列表中有很多项目。
有人可以解释一下吗? :)
似乎只需要'1','4','9'并设置差异..
>>> l = ['3246', '82576', '2476', '19254', '83254', '92576', '19326', '1547', '325769', '3254698', '1', '254698', '354', '1932', '325', '9325', '1927', '32546', '4', '9']
>>> set('123456789')-set(l)
set(['3', '2', '5', '7', '6', '8'])
答案 0 :(得分:2)
set
命令期望迭代转换为集合。因为你只提供一个字符串:
'123456789'
到第一组,它假定这是它,并将此字符串分解为集1,2 ...,9(字符串)。在l中,您只有' 1',' 4'和' 9'对应于这些项目,因此差异将其删除。
答案 1 :(得分:0)
Set
expects an iterable将传递给构造函数。
它是如何知道迭代被传递的?
正如this answer解释
iter内置检查 iter 方法,或者对于字符串 getitem 方法。要检查对象是否为“列表”而不是“字符串”,则关键是属性 getitem 和 iter :
>>In [9]: hasattr([1,2,3,4], '__iter__')
>>Out[9]: True
>>In [11]: hasattr((1,2,3,4), '__iter__')
>>Out[11]: True
>>In [12]: hasattr(u"hello", '__iter__')
>>Out[12]: False
>>In [14]: hasattr(u"hello", '__getitem__')
>>Out[14]: True
因此,字符串被分解为各个组件。 并进行进一步的计算。
此外,Set
不接受不可迭代的值。
>>> set(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable