首页 > 解决方案 > 获取有条件的列表元素

问题描述

假设我们有两个列表列表,如下所示:

A = [['Jake', 'Tall', 90], 
     ['Dunne', 'Tall', 80], 
     ['Steve', 'Not Tall', 70], 
     ['Robert', 'Tall', 70], 
     ['Emily', 'Not Tall', 85]]

B = [['Tall', 10], ['Not Tall', 20], ['Almost Tall', 30], ['Very Short', 40]]

因此,该列表A将在其列表中附加一个新元素,该元素来自其第三个元素和第二个元素的附加元素,B基于 的第二个元素是什么A,如果'Tall'它将被添加,10否则20如果'Not Tall'

为了便于理解,让我们以 为例A[0],我们看到,A[0][1] = 'Tall'我们将附加到的元素Jake是,其他元素90 + 10依此类推。A

最后,我对A列表的期望是:

A = [['Jake', 'Tall', 90, 100], 
     ['Dunne', 'Tall', 80, 90], 
     ['Steve', 'Not Tall', 70, 90], 
     ['Robert', 'Tall', 70, 80], 
     ['Emily', 'Not Tall', 85, 105]]

我试过的:

for row in A:
    if row[1] == 'Tall':
        row = row.append(row[2] + B[0][1])
    elif row[1] == 'Not Tall':
        row = row.append(row[2] + B[1][1])

但是你知道,这不是一种有效的方法,因为如果我们在B 需要中添加更多列表有助于为这个问题提供一种有效的方法。

标签: python

解决方案


A = [a + [(a[2]+dict(B)[a[1]])] for a in A]

运行此代码

基本上,这段代码遍历 A 中的子列表并在 B 中查找要对它们做什么,使用列表推导从它们中构建一个新列表。


推荐阅读