【问题标题】:How to resolve unhashable type: 'list' error如何解决不可散列的类型:“列表”错误
【发布时间】:2021-01-28 08:27:19
【问题描述】:

在 fowling 代码中,用户输入两个列表,第一个输入是整数(N),显示第一个列表中的元素数量(l1),第三个输入(M) 是一个整数,显示第二个列表中的元素数量@ 987654324@.

输入如下:

4
apple32
banana2
tomato3
potato
3
carrot
apple32
banana2

由于apple32banana2 都在两个列表中,因此输出应该是2,这意味着两个列表中有两个元素重复。我的代码出现错误:unhashable type: 'list'

N = int(input() )
l1 = [[x for x in input().split()] for _ in range(N)]
M = int(input() )
l2 = [[x for x in input().split()] for _ in range(M)]
print(len(set(l1).intersection(l2)))

【问题讨论】:

  • intersectionset 作为参数;你给它一个list
  • @ScottHunter 不,它需要任何可迭代的。
  • 无论如何,您正在尝试对列表进行哈希处理,l1 是一个包含列表的列表。您尝试将其放入 set 但列表中的 list 对象不可散列,如错误消息所述。不要尝试散列列表。这就是解决方案。
  • 你为什么要这样? [[x for x in input().split()] for _ in range(N)] 注意,这只是写[input.split() for _ in range(N)] 的罗嗦方式。但是你为什么要分裂?你可能只想要[input() for _ in range(N)] 在任何情况下,你真的应该尝试自己调试这些小程序。 StackOverflow 不是调试服务。你至少应该做一些研究,也许是一些调试打印等等,然后在问题中,告诉我们确切地你不明白什么

标签: python list hash hashtable


【解决方案1】:

看看你的理解嵌套

l1 = [[x for x in input().split()] for _ in range(N)]

这样的结果是一个列表的列表,每个列表都包含一个字符串,比如

[['apple'], ['banana'], ['carrot']]

列表不是可散列项;你不能用它做一个集合。

消除你的理解:

l1 = [x for x in input().split() for _ in range(N)]

...然后应用juanpa 的简化。这将为您留下一个字符串列表。您可以将intersection 直接应用于这些结构。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2017-12-27
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多