【问题标题】:How to make sure there are an equal amount of elements in two Python lists?如何确保两个 Python 列表中的元素数量相等?
【发布时间】:2017-03-27 00:47:07
【问题描述】:

我有两个列表,每个列表的长度约为 160 万个项目。每个项目要么是空白的,要么有一个包含 1 个或多个字符串的嵌入列表。不幸的是,其中一个列表中缺少数据,因此两者不对应。我想将这些列表的内容写入平面数据帧,但如果数组长度不同,则不能。

我已经尝试过一个 for 循环,当它检测到一个项目在一个列表中的长度与另一个列表中的长度不同时,它会将 NA 嵌入其中一个列表中,但这种方法需要很长时间,因为它必须循环通过 160 万个项目。

有没有一种更快、更优雅的方法来做这件事,而不是通过 for 循环方法。让整个事情运行大约需要 6 个小时。

编辑:这是我的意思的一个例子:

list_A = [[''],[''],[''],['a'],['a','b','c'],[''],['d']]
list_B = [[''],[''],[''],['a'],[''],[''],['']]

我想要将 NA 放在 list_B 的空列表中,这样 list_B 看起来像:

list_A = [[''],[''],[''],['a'],['a','b','c'],[''],['d']]
list_B = [[''],[''],[''],['a'],['NA','NA','NA'],[''],['NA']]

【问题讨论】:

  • numpy.array.size 应该足够快
  • 这是一个与 numpy 相关的问题吗?如果是这样,标记为这样。
  • @idjaw 我不知道,但我添加了标签以防万一。
  • 我不确定你的意思。这两个列表是否具有相同数量的元素?当您说“每个项目......其中都有一个嵌入式列表”时,您的意思是“每个项目......都是一个列表”吗?如果不是,请举个例子。 “NA”是在列表中还是在列表项中?请给出一个简短的示例,以及所需的结果。
  • 由于这些是列表列表,具有不同长度的子列表,这不适合 numpy。不管你喜不喜欢,你都必须遍历列表中的所有项目。您不能将迭代推入已编译的代码中。

标签: python list python-3.x numpy


【解决方案1】:

在您的示例中,相应的项目要么相同,要么list_B 中的项目应替换为与list_A 中的项目长度相同的NA 列表。这个生成器表达式应该足够快:

(a if a==b else len(a)*['NA'] for a,b in zip(list_A,list_B)) 

【讨论】:

  • 就是这样,完美解决了我的示例问题!我只是注意到我的例子不正确。 list_B 应该有的是数字而不是字母,(即不同的东西。)所以我正在寻找的只是对您的代码的轻微修改,我会放在这里以防它可以帮助其他人:(b if len (a)==len(b) else len(a)*['NA'] for a,b in zip(list_A,list_B))
猜你喜欢
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2022-01-24
  • 2015-02-15
  • 1970-01-01
  • 2022-01-10
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多