【发布时间】:2019-07-16 10:23:27
【问题描述】:
问题
我正在尝试使用 for 循环在运行时 add() 集合中的元素:
l1=set(map(int, input().split()))
n=int(input())
l2=set()
for i in range(n):
l2.add([int, input().split()])
print(l1)
print(l2)
令人惊讶的是,l1 是一个集合,但是当我在循环中继续 add() -ing 元素到我的集合 l2 时,我得到:
TypeError: unhashable type: 'list'
研究工作:
以下是我尝试将add() 元素设置为l2 并失败的其他方法:
l2=set()
for i in range(n):
l2.add(map(int, input().split()))
上面打印出来:
{<map object at 0x000001D5E88F36A0>, <map object at 0x000001D5E8C74AC8>}
即使这样也行不通!!
for i in range(n):
l2.add(set(map(int, input().split())))
请随时指出我做错了什么。
基本上,如果可以解释如何添加,答案将很有帮助 在运行时循环将元素添加到集合数据结构中
澄清:
我正在寻找在运行时使用用户输入制作一组集合:
所以如果用户给出以下输入:
1 2 3 4 5 6 7 8 9 10 11 12 23 45 84 78
2
1 2 3 4 5
100 11 12
第一行是我的集合l1。第二行是集合的数量,所以既然是2,那么后面的行就是集合的内容。
预期输出:
{{1,2,3,4,5},{100,11,12}}
【问题讨论】:
-
试试
(int, tuple(input.split()))。可变对象没有哈希码(因为它们在变异时会发生变化,并且会破坏哈希集合的工作方式)。set是使用哈希表实现的,因此它只能存储不可变的内容(或至少:身份不可变的内容)。lists 是可变的,因此没有哈希码。split也返回一个列表。 -
好的,让我检查并恢复。
-
我得到:AttributeError: 'function' object has no attribute 'split'
-
对不起
input().split()缺少的括号是一个错字 -
我写了 l2.add((int, tuple( input.split())))
标签: python python-3.x set