【问题标题】:Comparing nested list and finding index of value match比较嵌套列表并查找值匹配的索引
【发布时间】:2020-05-16 14:30:03
【问题描述】:

我正在寻找基于第一个索引的嵌套列表中的匹配项,并添加每个匹配的列表的浮点数。

假设我有这个嵌套列表:

a = [[1234, 5678, 4.5], [0987, 6543, 6.8], [4321, 5678, 9.8]]

我正在寻找一种方法来查找列表中的第一个索引与“a”中的另一个列表的匹配项,一旦找到匹配项,就将第二个索引的值相加。

我尝试了很多方法来检查匹配项,例如嵌套 for 循环、any() 函数以及诸如:

match = []

if a[x][1] in a[0:-1][1]:
   a.pop(x)
   match.append(x)

根据匹配项创建一个新列表并以这种方式进行比较,但它似乎永远不会起作用。 所有这些方法似乎只是在发生匹配时返回,而不是与匹配关联的特定索引。

我是否应该创建一个字典,其中键是第一个索引,值是第二个索引并以这种方式进行比较?还是有其他方法可以检查匹配项的索引并在循环内进行比较?

【问题讨论】:

  • 预期输出是什么?
  • 预期输出将是与嵌套列表中第一个索引的特定值相关联的第二个索引中所有浮点数的总和。这就是为什么我需要找到匹配项的索引,因为它们允许我从每个匹配的列表中求和第二个索引
  • 浮点数在第三个索引而不是第二个
  • 哦,是的,对不起,你是对的,我想的更多的是 0,1,2 的顺序。
  • edit您的问题提供您期望从样本数据中获得的确切输出,并解释如何生成该输出。

标签: python list indexing nested compare


【解决方案1】:

正如您在问题末尾所建议的那样,您可以使用字典来做您想做的事,使用第一个索引值作为键,第二个索引作为值。遍历您的列表列表,将项目存储在字典中。如果它已经存在,则添加值。

a = [[1234, 5678, 4.5], [987, 6543, 6.8], [4321, 5678, 9.8]]
d = {}
for l in a:
    id = l[1]
    if id not in d:
        d[id] = l[2]
    else:
        d[id] += l[2]
print(*d.items())

输出:

(5678, 14.3) (6543, 6.8)

【讨论】:

  • 非常感谢,这正是我所需要的!
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2012-05-09
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
相关资源
最近更新 更多