У меня есть список списков:
a = [[1,0],[1],[0]]
b = [[A,B],[C],[D]]
Я хочу создать новый список списка с элементами "b" в соответствии с содержанием "a": в этом случае, если в той же позиции есть "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])
Это, очевидно, создает список с теми элементами, которые я хочу, но он не отличает внутренние списки. Я действительно пробовал другие вещи какое-то время, я не хотел, чтобы я чувствовал, что не пытался.
Вы можете использовать вложенный цикл for
с zip
+ enumerate
. Обратите внимание, что мы сначала создаем deepcopy
b
, так что исходный список не изменяется.
from copy import deepcopy
a = [[1,0],[1],[0]]
b = [['A','B'],['C'],['D']]
c = deepcopy(b)
for idx1, (i1, j1) in enumerate(zip(a, b)):
for idx2, (i2, j2) in enumerate(zip(i1, j1)):
c[idx1][idx2] = j2 if i2 else ''
print(c)
[['A', ''], ['C'], ['']]
Вы также можете, если хотите, обернуть это в понимании списка.
Попробуй это:
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)
Я бы пошел с чем-то вроде этого:
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
на то, что вы хотите считать пустым значением (например, символ '_'
)
Это один из способов использования 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'], ['_']]
c = [[letter if value != 0 else None for value, letter in zip(a_sub, b_sub)] for a_sub, b_sub in zip(a, b)]
но да, покажите, что вы пробовали в целом.