假设我们有两个列表列表,如下所示:
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
中添加更多列表,
需要帮助找到解决此问题的有效方法。
答案 0 :(得分:1)
A = [a + [(a[2]+dict(B)[a[1]])] for a in A]
基本上,此代码在列表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]])