获取具有条件的列表元素

时间:2018-09-30 10:06:04

标签: python

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

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中添加更多列表, 需要帮助找到解决此问题的有效方法。

3 个答案:

答案 0 :(得分:1)

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

Run this code

基本上,此代码在列表A中遍历子列表,并在B中查找对它们执行的操作,使用列表理解功能在其中创建新列表。

答案 1 :(得分:0)

您可以这样迭代:

android.support.v4.app.Fragment

当然必须有一些快捷方式,例如lambda表达式,yield等,但这将是基本的解决方案。

答案 2 :(得分:0)

可以通过列表理解

完成
a = [i + [i[-1] + j[-1]] for i in a for j in b if i[1] in j]
[['Jake', 'Tall', 90, 100], ['Dunne', 'Tall', 80, 90], ['Steve', 'Not Tall', 70, 90], ['Robert', 'Tall', 70, 80], ['Emily', 'Not Tall', 85, 105]]

扩展循环:

new_a = []

for i in a:
    for j in b:
        if i[1] in j:
            new_a.append(i + [i[-1] + j[-1]])