Python 如何解决不可损坏类型:';列表';错误

Python 如何解决不可损坏类型:';列表';错误,python,list,hash,hashtable,Python,List,Hash,Hashtable,在fowling代码中,用户输入两个列表,第一个输入是一个整数(N),显示第一个列表(l1)中的元素数量,第三个输入(M)是一个整数,显示第二个列表(l2)中的元素数量 输入如下: 4 apple32 banana2 tomato3 potato 3 carrot apple32 banana2 由于apple32和banana2都在两个列表中,因此,输出应该是2,这意味着两个列表中都有两个重复的元素。我的代码出现错误:不可修复类型:“列表” N = int(input() ) l1 = [[

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

输入如下:

4
apple32
banana2
tomato3
potato
3
carrot
apple32
banana2
由于
apple32
banana2
都在两个列表中,因此,输出应该是
2
,这意味着两个列表中都有两个重复的元素。我的代码出现错误:不可修复类型:“列表”

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)))

看看你的理解嵌套

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
的简化。这将给您留下一个字符串列表。您可以将
交叉点
直接应用于这些结构。

交叉点
集合
作为参数;你正在给它一个
列表
@ScottHunter不,它需要任何iterable。无论如何,你正在尝试哈希列表,
l1
是一个包含列表的列表。您尝试将其放入
集合
,但列表中的
对象不可散列,正如错误消息所述。不要尝试去散列列表。这就是解决办法。你为什么要这样做<代码>[[x代表输入中的x().split()]代表范围内(N)]
注意,这只是一种冗长的书写方式
[input.split()代表范围内(N)]
。但你为什么要分手?您可能只需要
[input()for uu in range(N)]
在任何情况下,您都应该自己调试这些小程序。StackOverflow不是调试服务。你至少要做一些研究,也许是一些调试打印,等等,然后在问题中,告诉我们你到底不明白什么