我有一个词汇
,它是单词列表。我有一个包含两列的数据框 posts
:words
和 wordsdictcoded
。第一个包含诸如 ['this', 'is']
之类的单词列表。词汇表包含 words
列中出现的所有单词。
wordsdictcoded
列应包含编码的单词。编码的工作原理如下:每个单词都由词汇表长度中的 0 和 1 数组表示。 words
列由词汇表进行编码:如果第 n 个单词是词汇表中的第 i 个单词,则编码的第 i 个元素将为 1。
铁:
vocabulary = ['this', 'is' 'a', 'test']
words[i] = ['a', 'test']
wordsdictcoded[i] = [0, 0, 1, 1]
这就是我想要实现的目标。我的代码是:
listofzeros = [0] * len(vocabulary)
posts['wordsdictcoded'] = [listofzeros] * len(posts)
for i in range(0, len(posts)):
for word in posts['words'][i]:
posts['wordsdictcoded'][i][vocabulary.index(word)] = 1
但是,我最终得到的每行帖子都是全 1 ['wordsdictcoded']。我不明白。如果我只是运行 range(0,1)
循环,即使 print(posts['wordsdictcoded'][5]
获取值,所有行都会获取该值。为什么?
最佳答案
这是一个常见的 Python 陷阱。问题是 [listofzeros] * len(posts)
复制同一个列表 len
次,但它不会创建副本。你可以测试一下
id(posts['wordsdictcoded'][0]) == id(posts['wordsdictcoded'][1])
请参阅下面的评论(用户 DYZ
)了解解决方案
关于python - 循环更改甚至没有循环的行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146361/