Сравните списки и создайте новый согласно содержанию обоих

1

У меня есть список списков:

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])

Это, очевидно, создает список с теми элементами, которые я хочу, но он не отличает внутренние списки. Я действительно пробовал другие вещи какое-то время, я не хотел, чтобы я чувствовал, что не пытался.

  • 0
    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)] но да, покажите, что вы пробовали в целом.
Теги:
list

4 ответа

1
Лучший ответ

Вы можете использовать вложенный цикл 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'], ['']]

Вы также можете, если хотите, обернуть это в понимании списка.

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)
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 на то, что вы хотите считать пустым значением (например, символ '_')

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'], ['_']]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню