Python 在列表的第一列中查找元素,但在第二列中返回该元素

Python 在列表的第一列中查找元素,但在第二列中返回该元素,python,Python,我对Python非常陌生,我正在尝试执行以下操作 我有两张清单,其中一张是 清单1: ['elem11','elem12','elem13'], ['elem21','elem22','elem23'], ['elem31','elem32','elem33'] 另一个呢 清单2: ['elem11', value1], ['elem12', value2], ['elem13', value3], ['elem21', value4], ... 列表2包含列表1中的所有元素及其

我对Python非常陌生,我正在尝试执行以下操作

我有两张清单,其中一张是

清单1:

['elem11','elem12','elem13'],

['elem21','elem22','elem23'],

['elem31','elem32','elem33']
另一个呢

清单2:

['elem11', value1],

['elem12', value2],

['elem13', value3],

['elem21', value4],
...

列表2包含列表1中的所有元素及其各自的值

我想生成第三个列表,如

清单3:

['result line1 from list1', value1*value2*value3],

['result line2 from list1', value4*value5*value6],

['result line3 from list1', value7*value8*value9],
list1和list2中的元素根本没有顺序,因此我必须能够将list1中的每个元素与其list2中的值进行匹配

我试过用类似的东西

因为我在第三区 如果列表2中的列表1[i][0] ... 如果列表2中的列表1[i][1] ... 如果列表2中的列表1[i][2] ... 但是我已经不知道如何从列表2中获取第二列的值

我应该使用什么函数?

*假设列表1中的所有elemX都是唯一的,并且在列表2中只出现一次

如果将list2更改为dict,则很容易获得值

list2_dict = {item[0]: item[1] for item in list2}
然后遍历列表1并获取值

list3 = []
for i in range(len(list1)):
    list3.append([f"result line{i+1} from list1", list2_dict[list1[i][0]] * list2_dict[list1[i][1]] * list2_dict[list1[i][2]])

您使用了错误的数据结构。你想要的不是清单,而是口述

直接创建dict:

list2_dict = {
   'elem11': value1,
   'elem12': value2,
   'elem13': value3,
   'elem21': value4
}
或者从列表中创建一个,如果您无法更改从列表开始的事实:

list2 = [
   ['elem11', value1],
   ['elem12', value2],
   ['elem13', value3],
   ['elem21', value4]
]
list2_dict = {key:val for key,val in list2}
然后,您可以迭代列表1并构建列表3:

list3 = []
for i, list1_row in enumerate(list1):
    row_sum = 0
    for list1_el in list1_row:
        row_sum += list2_dict[list1_el]
    list3.append(("result line" + str(i+1) + " from list1", row_sum))

另外,请注意,list3不包含子列表,而是元组。如果你知道列表中的元素数量,就不要使用列表。改用元组。

您能提供一个更具体的输入和输出示例吗?值的数据类型是什么?它应该是list3中的“result line1 from list1”还是list2中其他内容的表示形式?我认为您应该使用字典,例如d={'elem11':value1,…}。因为这样您就可以对列表1中的l执行[d[item]或类似操作。列表1中的elemX是否都是唯一的,并且在列表2中只出现一次?“elem”和“列表1中的result lineX”都是字符串“值”是一个浮点数。list1中的每个元素在List2中都只有一个对应者,这非常有效。现在我理解了字典的意思,我很欣赏这段代码的简洁性。它也工作得很好。对于key,我认为list2中的val更像python。此外,这假设list1总是由三元组组成,这是没有指定的。此外,我甚至会说,它肯定不总是这样的,否则他可以把它们做成元组。此外,我对rangelenlist1中的我提出了严厉的批评。单凭这一点就不应成为公认的答案。最佳实践是针对list1中的list1_元素,或者,如果您确实需要i,for i,enumeratelist1中的list1_元素。此外,不要将子列表附加到list3,请使用元组。您没有任何理由应该在那里使用列表。@Finomnis有任何理由我不应该使用列表吗?我知道元组也能工作。因为列表不是用来工作的,它只是用于错误目的的错误工具。不是“最佳实践”。技术上的原因是,速度较慢。您正在编码的样式受到C编码样式的强烈影响,在大多数情况下,C编码样式对于python是错误的。我真的不在乎您如何编写自己的项目,但如果您就stackoverflow提供建议,您应该真正坚持最佳实践。
# list3:
[
   ('result line1 from list1', <some number>),
   ('result line2 from list1', <some number>),
   ('result line3 from list1', <some number>)
]