【问题标题】:Im trying to compare 2 lists that are from user input but it gi我试图比较来自用户输入的 2 个列表,但它 gi
【发布时间】:2021-04-26 14:50:41
【问题描述】:
liste0 = []
liste1 = []
s1 = input("kişileri gir")
s2 = input("kişileri gene gir")
s1 = s1.split(",")
s2 = s2.split(",")
liste0.append(s1)
liste1.append(s2)
print(set(liste0) ^ set(liste1))

#error is: TypeError: unhashable type: 'list'

【问题讨论】:

标签: python list input set


【解决方案1】:

您的意思是使用extend 而不是append?

liste0.extend(s1)
liste1.extend(s2)

当您使用append 时,您有一个嵌套列表。例如,如果您在第一个提示符处输入 1,2,3,则会得到 list0 = [['1', '2', '3']],因为它将拆分输入作为列表作为 单个元素附加到空列表中。

但你不能在集合内有列表,例如:

print(set([0, 1, 2]))
# {0, 1, 2}

print(set([0, [1, 2]]))
# TypeError: unhashable type: 'list'

来自set() 文档:

返回一个新的 set 或 freezeset 对象,其元素取自可迭代对象。集合的元素必须是可散列的。

来自hashable 文档:

大多数 Python 的不可变内置对象都是可散列的;可变容器(例如列表或字典)不是;不可变容器(例如元组和frozensets)只有在它们的元素是可散列的时候才是可散列的。

【讨论】:

  • 您可能想解释一下为什么这可能会解决问题。
  • 我明白了,非常感谢。我还有一个小问题。有没有其他方法可以在不使用集合的情况下比较 2 个列表不那么复杂?
  • @Gladiones 您也可以使用列表推导来做到这一点,但使用集合是高效的和 Pythonic。另见:stackoverflow.com/q/3462143/967621
猜你喜欢
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多