【问题标题】:How to separate list of lists having tuples (as if from a word2vec most_similar results) into individual variables?如何将具有元组的列表列表(好像来自 word2vec most_similar 结果)分成单独的变量?
【发布时间】:2021-07-12 02:30:39
【问题描述】:

我正在编写一个程序,使用 Gensim for word2vec 查找输入单词列表中最相似的单词。

例如:input_list = ["happy", "beautiful"]

此外,我使用for loop 来遍历列表,并使用.append() 函数将输出存储在列表数据结构中。

最终列表是具有元组的列表的列表。见下文

results = [[('glad', 0.7408891320228577),
('pleased', 0.6632170081138611)],
[('gorgeous', 0.8353002667427063),
('lovely', 0.8106935024261475)]]

我的问题是如何将列表列表分成独立的列表?我关注了来自12 的答案,这些答案建议像a, b = results 一样解压。

但是当您知道输入元素的数量(这里是 2)时,这是可能的。

预期输出(基于以上):

list_a = [('glad', 0.7408891320228577), ('pleased', 0.6632170081138611)]
list_b = [('gorgeous', 0.8353002667427063), ('lovely', 0.8106935024261475)]

但是,如果输入元素的数量总是可变的,比如 4 或 5,那么我们如何在运行时解包并获取对独立列表的引用?

或者有什么更好的数据结构来存储上述结果,以便解包或进一步处理更友好?

请帮忙。

【问题讨论】:

  • 你的意思是单个列表还是每个元组的列表?包括预期的输出
  • @yudhiesh 具有后续元组的单独列表。是的,请检查我在哪里添加了预期输出的问题。

标签: python tuples nested-lists destructuring


【解决方案1】:

如果您有可变数量的查询词 - 有时是 2,有时是 5,有时是任何其他数字 N - 那么您几乎肯定 想要带这些输出到完全独立的变量名(如list_alist_b 等)。

为什么不呢?那么,您接下来的步骤可能是对 N 个项目中的 每个 项进行操作。

为此,您需要将它们放在某种可以迭代的索引列表中。

如果相反,它们位于一些局部变量中——list_alist_blist_clist_d——就像你要求的那样?然后在只有 3 个的情况下,其中一些变量,例如 list_d,要么不存在(未定义),要么将持有一些不同的信号值(例如 None)。

对于大多数任务,这将更难处理 - 需要笨拙的分支/测试来获得可能的结果计数。

相反,您现有的results,它是一个list,您可以通过数字索引访问每个results[0]results[1]——无论是单独使用还是循环使用,都更有用当你处理的事情的数量会发生变化时,结构会发生变化。

如果您认为您对预期的最终状态有正当理由,请通过对问题的扩展更详细地描述原因,尤其是您接下来想做的事情。并考虑几个不同场景的后续步骤:仅 1 组结果、2 组结果、5 组结果、100 组结果。 (在最后一种情况下,除了list_z,你还会给变量取什么名字?)

(另外,这真的不是关于 Gensim 或 word2vec 的问题,而是关于核心 Python 语言功能和变量/数据结构处理的问题。所以我删除了这些标签,并添加了 @987654334 @,一种多变量赋值的术语,几乎可以满足您的需要,但并不完全正确,并且会稍微调整标题。)

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2016-01-11
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多