比较列表并根据两者的内容创建一个新列表

时间:2018-07-05 09:49:44

标签: python list

我有以下列表列表:

a = [[1,0],[1],[0]]
b = [[A,B],[C],[D]]

我想创建一个新列表列表,根据“ a”的内容使用“ b”元素:在这种情况下,如果在同一位置有一个“ 1”,我们将打印字母。如果为0,则排名为空。

关于上一个示例,我想要的结果是:

c = [[A,_],[C],[_]]

编辑:我尝试过的方法:

for i in range(len(a)):
    for j in range(len(a[i])):
        if b[i][j] == 1:
              c.append(a[i][j])

这显然会创建一个包含所需元素的列表,但不会区分内部列表。我真的有一段时间尝试过其他东西,我不想给自己我没有尝试过的感觉。

4 个答案:

答案 0 :(得分:1)

您可以对for + zip使用嵌套的enumerate循环。请注意,我们首先创建一个deepcopy的{​​{1}},以便原始列表不变。

b

如果您愿意,也可以将其包装在列表理解中。

答案 1 :(得分:0)

这是使用enumerate的一种方法。

a = [[1,0],[1],[0]]
b = [["A","B"],["C"],["D"]]

res = []
for i, v in enumerate(b):
    temp = []
    for n, j in enumerate(v):
        temp.append(j if a[i][n] else "_")
    res.append(temp)
print(res)

输出:

[['A', '_'], ['C'], ['_']]

答案 2 :(得分:0)

尝试一下:

a = [[1,0],[1],[0]]
b = [['A','B'],['C'],['D']]

for i in range(len(b)):
    temp=[]
    for j in range(len(b[i])):
        if a[i][j]==1: #check value of a
            temp.append(b[i][j]) 
        else:
            temp.append('_')
    b[i]=temp
print(b)

答案 3 :(得分:0)

我会选择这样的东西:

a = [[1,0],[1],[0]]
b = [['A','B'],['C'],['D']]
c = []
for i in range(0, len(a)):
  c.append([])
  for j in range(0, len(a[i])):
    if (a[i][j] == 1):
      c[i].append(b[i][j])
    else:
      c[i].append(None)

您可以将None替换为要考虑为空值的任何内容(例如字符'_'