如何将具有元组的列表列表(就像来自 word2vec most_similar 结果)分成单个变量?

How to separate list of lists having tuples (as if from a word2vec most_similar results) into individual variables?

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

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

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

最终列表是一个包含元组的列表列表。见下文

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

我的问题是如何将列表列表拆分成独立的列表?我遵循了 1 and 2 的答案,建议像 a, b = results.

那样解包

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

预期输出(基于以上):

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

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

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

请帮忙。

如果你有可变数量的 query-words - 有时是 2,有时是 5,有时是任何其他数字 N – 那么你几乎肯定会 not 想将它们带入 totally-separate 变量名(如 list_alist_b 等)。

为什么不呢?那么,您接下来的步骤可能是对 N 项中的 each 项进行处理。

要做到这一点,您需要以某种 indexed-list 的形式进行迭代。

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

对于大多数任务,这将更难处理 - 需要笨拙的 branches/tests 来计算所有可能的结果。

相反,您现有的 results,它是一个 list,您可以在其中通过数字索引访问每个 - results[0]results[1] - 单独或在当您处理的事物的数量会有所不同时,循环是一个 typically-useful 结构。

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

(另外,这不是 真正 关于 Gensim 或 word2vec 的问题,而是关于核心 Python 语言特性和 variable/data-structure 处理的问题。所以我'我们删除了这些标签,并添加了 destructuring,这是一种 multiple-variable 赋值的术语,几乎 可以满足您的需求,但不是很正确,并且会稍微调整一下标题。)