首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作2克瓦?

如何制作2克瓦?
EN

Stack Overflow用户
提问于 2016-10-17 08:01:13
回答 3查看 2.1K关注 0票数 2

我有一些教程中的代码-:

代码语言:javascript
复制
list1 = [['hello','there','you','too'],['hello','there','you','too','there'],['there','you','hello']]

def get_shingle(size,f):
    #shingles = set()
    for i in range (0,len(f)-2+1):
        yield f[i:i+2]

#shingles1 = set(get_shingle(list1[0],2))
#shingles2 = set(get_shingle(list1[1],2))
shingles1 = set(get_shingle(2,list1[0]))
shingles2 = set(get_shingle(2,list1[1]))

print shingles1
print shingles2
print "done"

当我试图运行这段代码时,我得到了一个错误-:

代码语言:javascript
复制
Traceback (most recent call last):
  File "E:\Research\Shingle Method\create_shingle.py", line 10, in <module>
    shingles1 = set(get_shingle(2,list1[0]))
TypeError: unhashable type: 'list'

如果设置了list1,那么错误就不会出现。但是我不能将list1转换为,它移除重复的单词,而且我还需要它作为我的主要代码的列表,它以列表的形式处理一个巨大的文本文件。为什么我会收到这份“难以掌握的名单”?我们就不能把名单当作论据吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-17 08:22:41

问题在于,您的get_shingle()函数生成lists。列表是不可理解的,这是构建一个集合所需要的。您可以通过生成一个元组(这是可以理解的)来轻松地解决这个问题,而不是一个列表。

转换代码中的下列行:

代码语言:javascript
复制
yield tuple(f[i:i+2])

这将产生以下结果:

代码语言:javascript
复制
list1 = [['hello','there','you','too'],['hello','there','you','too','there'],['there','you','hello']]

def get_shingle(size,f):
    #shingles = set()
    print(f)
    for i in range (0,len(f)-2+1):
        yield tuple(f[i:i+2])

shingles1 = { i for i in get_shingle(2,list1[0])}
print(shingles1)

和产出:

代码语言:javascript
复制
['hello', 'there', 'you', 'too']
{('you', 'too'), ('hello', 'there'), ('there', 'you')}
票数 1
EN

Stack Overflow用户

发布于 2016-10-17 08:17:42

因为yield命令返回生成器。将生成器转换为集合将触发不可访问的类型错误。

您可以通过简单的更改来使代码工作。

代码语言:javascript
复制
shingles1 = get_shingle(2,list1[0])
lst = [x for x in shingles1]

这将给出来自list1[0]的所有重要信息,并将其放入lst中。

票数 1
EN

Stack Overflow用户

发布于 2016-10-17 08:42:43

生成一个生成器,集合(迭代器)需要一个不可变的迭代器。

所以像这样的东西会起作用

代码语言:javascript
复制
shingles1 = set(get_shingle(2,list1[0]))
set(tuple(x) for x in shingles1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40081237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档