为什么只有一个元素?
Topic source>>> lhf1
(1, 2, 3)
>>> lhf2
(1, [2, 3])
>>> b = set([lhf1])
>>> b
{(1, 2, 3)}
>>> b = set([lhf2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
刚刚发的有错误,b赋值没加set, 有list列表的都不能加在dirt或者set列表里。 但为什么没lis列表的都变成了一个元素呢?
1.对于>>> a = {lhf1} ,其实对应的实际操作是 >>> a = {lhf1:“空对象”},而a是一个字典,很明显a里面只有一个键值对 2.对于第二个问题,是由于你>>> b = ([lhf1])也没有加set,所以len()返回也是1.....你可以加上set再计算下长度,我自己测试过返回是3
首先要先告诉你,你的lhf1和lhf2都是tuple类型的,都是不可变类型,但你的lhf2里的第二个元素是个list,这是个可变类型。
其次就是你的赋值语句“a={lhf1}”,这是直接赋值语句,那么问题来了,这个a是dict类型还是set类型呢?答案显而易见,因为有{}的不是dict就是set,而二者最大的区别就是set没有value值,正如你的赋值语句写的那样并没有在后面写上value的值,所以程序就判断a是一个set类型,事实上用type(a)也验证了这点。因为之前说到了你这句赋值语句是直接赋值,相当于java里的初始化一样,显式的给了a值了,如int [] word = {a,b,c};你说说这个word数组len是几?答案是3,那么改成int[] num = {a};呢,len是几?答案是1,所以,和你的a = {jhf1}一样,长度是1,如果你将这句话改成a = {jhf1,jhf3},那么它的len肯定就是2了(注意这里的lhf3里的元素千万不要是(1,2,3),因为这样的话会和jhf1重复,长度结果还是1)可能你想问如果我想看到len=3该如何做呢,很简单,将a = {jhf1}改成a = set(jhf1)即可。
最后就是你那句“b = set([jhf1])”,其实这句话和“b = {jhf1}”是一样的效果,后者是显式赋值,而前者呢,jhf1本身就是一个tuple(你也可以理解成list)了,你又加了个[],说明你又把本身是tuple(或者list)又放在了一个list中,而如果想输出正确的结果应该这样写“b = set(jhf1)”即去掉[]。
- 1
diska本尊