Python TypeError:查找产品的组成时,键入“list”不可损坏
我读到这样一个问题 A负责确定B的三个孩子的年龄 儿童B告诉A孩子年龄的乘积是36。考虑之后 这个线索,A回答说需要另一个线索,所以B告诉A孩子的年龄总和。同样,A回答说需要另一条线索,所以B告诉A 最大的孩子会弹钢琴。听了这条线索后,A告诉B孩子的年龄 三个孩子。 这三个孩子多大了 深入分析产品为36并已试用过的三元组Python TypeError:查找产品的组成时,键入“list”不可损坏,python,Python,我读到这样一个问题 A负责确定B的三个孩子的年龄 儿童B告诉A孩子年龄的乘积是36。考虑之后 这个线索,A回答说需要另一个线索,所以B告诉A孩子的年龄总和。同样,A回答说需要另一条线索,所以B告诉A 最大的孩子会弹钢琴。听了这条线索后,A告诉B孩子的年龄 三个孩子。 这三个孩子多大了 深入分析产品为36并已试用过的三元组 In [4]: ll = [] ...: for x in range(1,37): ...: for y in range(1, 37): ...:
In [4]: ll = []
...: for x in range(1,37):
...: for y in range(1, 37):
...: for z in range(1, 37):
...: if x * y * z == 36:
...: l = sorted([x, y,z])
...: ll.append(l)
...: s = set(ll)
...: print(s)
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-cc3ad95c0d1b> in <module>()
6 l = sorted([x, y,z])
7 ll.append(l)
----> 8 s = set(ll)
9 print(s)
10
TypeError: unhashable type: 'list'
我对不可损坏的类型列表感到非常困惑。我不明白您为什么需要一套。也许你可以试试:
ll = []
for x in range(1,37):
for y in range(1, 37):
for z in range(1, 37):
if x * y * z == 36:
l = sorted([x, y,z])
ll.append(l)
#s = set(ll)
print(l)
哪些产出:
[1,1,36]
[1, 2, 18]
[1, 3, 12]
[1, 4, 9]
[1, 6, 6]
[1, 4, 9]
[1, 3, 12]
[1, 2, 18]
[1, 1, 36]
[1, 2, 18]
[2, 2, 9]
[2, 3, 6]
[2, 3, 6]
[2, 2, 9]
[1, 2, 18]
[1, 3, 12]
[2, 3, 6]
[3, 3, 4]
[3, 3, 4]
[2, 3, 6]
[1, 3, 12]
[1, 4, 9]
[3, 3, 4]
[1, 4, 9]
[1, 6, 6]
[2, 3, 6]
[2, 3, 6]
[1, 6, 6]
[1, 4, 9]
[2, 2, 9]
[1, 4, 9]
[1, 3, 12]
[1, 3, 12]
[1, 2, 18]
[1, 2, 18]
[1,1,36]
我不明白你为什么需要一套。也许你可以试试:
ll = []
for x in range(1,37):
for y in range(1, 37):
for z in range(1, 37):
if x * y * z == 36:
l = sorted([x, y,z])
ll.append(l)
#s = set(ll)
print(l)
哪些产出:
[1,1,36]
[1, 2, 18]
[1, 3, 12]
[1, 4, 9]
[1, 6, 6]
[1, 4, 9]
[1, 3, 12]
[1, 2, 18]
[1, 1, 36]
[1, 2, 18]
[2, 2, 9]
[2, 3, 6]
[2, 3, 6]
[2, 2, 9]
[1, 2, 18]
[1, 3, 12]
[2, 3, 6]
[3, 3, 4]
[3, 3, 4]
[2, 3, 6]
[1, 3, 12]
[1, 4, 9]
[3, 3, 4]
[1, 4, 9]
[1, 6, 6]
[2, 3, 6]
[2, 3, 6]
[1, 6, 6]
[1, 4, 9]
[2, 2, 9]
[1, 4, 9]
[1, 3, 12]
[1, 3, 12]
[1, 2, 18]
[1, 2, 18]
[1,1,36]
set对象是通过哈希表实现的。这意味着存储在其中的所有值都必须是可哈希的,也就是说,hashvalue必须有效
您正试图从包含其他列表的列表中构建一个集合。不幸的是,列表是不可散列的,因此您会得到您在标题中描述的错误
有几种方法可以解决这个问题。最简单的方法是使用元组而不是内部列表。元组是可散列的,只要它们的所有内容也是可散列的,整数也是可散列的,所以它们应该适合您
尝试将ll.appendl更改为ll.appendtuplel,您的代码应该可以工作。set对象是通过哈希表实现的。这意味着存储在其中的所有值都必须是可哈希的,也就是说,hashvalue必须有效
您正试图从包含其他列表的列表中构建一个集合。不幸的是,列表是不可散列的,因此您会得到您在标题中描述的错误
有几种方法可以解决这个问题。最简单的方法是使用元组而不是内部列表。元组是可散列的,只要它们的所有内容也是可散列的,整数也是可散列的,所以它们应该适合您
尝试将ll.appendl更改为ll.appendtuplel,您的代码应该可以工作。您的ll是列表的列表您的ll是列表的列表