【问题标题】:Searching through list of lists搜索列表列表
【发布时间】:2020-06-26 07:56:33
【问题描述】:

我对 python 还很陌生,但我遇到了循环/列表问题。我有两个列表,想在列表中搜索以查找匹配元素并将该列表中的项目添加到新列表中。

这是我的代码:

newList = []
elements = [["Wood", "elem1"], ["Stone", "elem2"], ["Concrete", "elem3"]]
nameNum = [["Wood", "2316"], ["Concrete", "3360"], ["Stone", "2785"]]

列表可以更长,但长度不一定相同,但仅使用 3 个示例。 我真正需要的是newList = ["2316", "2785", "3360"]

【问题讨论】:

  • 仅供参考,added[i] == list2[i][0]
  • 是的,我很笨,这整个帖子都很笨

标签: python list loops for-loop


【解决方案1】:

据我了解,如果内部列表中的第一个元素位于第一个位置的嵌套列表之一的 list1 中,则您希望从 list2 嵌套元素构建一个新列表:

list1 = [["a", 1], ["b", 2], ["c", 3]]
list2 = [["a", 1], ["c", 3], ["b", 2]]

added = {e[0] for e in list1}

new_list = [e[1] for e in list2 if e[0] in added]

print(new_list)

输出:

[1, 3, 2]

修改后

你可以使用:

d = {e[0]: i for i, e in enumerate(elements)}
p = sorted([e for e in  nameNum if e[0] in d], key= lambda x: d[x[0]])
newList = [s for _, s in p]
print(newList)

输出:

['2316', '2785', '3360']

【讨论】:

  • 谢谢。好像我的问题写得不好。列表并不总是相同的长度,并且并不总是具有相同的元素。这实际上是一个可怕的例子..注意我需要的东西。想在发布坚果之前重写这是一个糟糕的主意 我的实际代码是:elements = [["Wood", "elem1"], ["Stone", "elem2"], ["Concrete", "elem3", ]] nameNum= [["Wood", "2316"], ["Concrete", "3360"], ["Stone", "2785"]] newList 应该是:["2312", "2785", "3060 "] 也许我应该发一个新帖子.. 很抱歉浪费你的时间。
  • @imdumbplshelp 你的意思是新列表应该是:["2316", "2785", "3060"]
  • @imdumbplshelp 现在检查我的答案
  • 如果元素列表长于nameNum则不起作用,我也不知道足够多的python来理解它,但无论如何谢谢
【解决方案2】:
elements = [["Wood", "elem1"], ["Stone", "elem2"], ["Concrete", "elem3"]]
nameNum = [["Wood", "2316"], ["Concrete", "3360"], ["Stone", "2785"]]
new_list =[]
for element in elements:
  for num in nameNum:
    if num[0] in element:
      new_list.append(num[1])
      break
print(new_list)

在嵌套列表中循环 2 次,首先从 elements 中提取元素,然后第二次循环从 nameNum 中提取值

【讨论】:

  • 以后可以使用字典将键值存储在同一个数组中
  • 谢谢!我要从文本文件中导入值,但不打算使用字典。
  • 请让您的答案自成一体。
猜你喜欢
  • 2013-10-28
  • 2010-12-04
  • 2011-08-01
  • 2021-05-15
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多