我有以下列表列表:
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])
这显然会创建一个包含所需元素的列表,但不会区分内部列表。我真的有一段时间尝试过其他东西,我不想给自己我没有尝试过的感觉。
答案 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
替换为要考虑为空值的任何内容(例如字符'_'
)