Сравните списки и создайте новый согласно содержанию обоих - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующий список списков:

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

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

Ответы [ 4 ]

0 голосов
/ 05 июля 2018

Вы можете использовать вложенную петлю 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 голосов
/ 05 июля 2018

Попробуйте это:

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 голосов
/ 05 июля 2018

Я бы пошел с чем-то вроде этого:

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 голосов
/ 05 июля 2018

Это один подход, использующий 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'], ['_']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...