Как заменить значение в матрице, которое соответствует другой матрице? - PullRequest
0 голосов
/ 18 ноября 2018

Например

a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]

И я хочу получить матрицу c:

c = [0.5, 0.8, 0, 0.11, 0, 0]

Это похоже на то, если i в a = ww для ww, ее в n для n вb, затем замените ее на ee else 0

Я пробую команду if and else, и вот мой код

for n in b:
for t,y in n:
    for tt in a:
        mmm = [y if t == ''.join(tt) else ''.join(tt)]
        print(mmm)

Но это не удалось.Как мне написать код для этой ситуации?

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Вы можете преобразовать ваш двойной список отображений в словарь поиска и использовать список-комп:

a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]

# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value 
print(d)

# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)

Вывод:

# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}

# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]

Связанный:

0 голосов
/ 18 ноября 2018

chain + dict + понимание списка

Ваше отображение b представляет собой список списков, вы можете сгладить его в итерируемое изкортежи через chain.from_iterable.Затем введите dict, чтобы создать эффективное отображение.

Наконец, используйте понимание списка с dict.get для желаемого результата.Просто не забудьте преобразовать значения a из str в int.

from itertools import chain

a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]

b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]

print(c)

[0.5, 0.8, 0, 0.11, 0, 0.23]
0 голосов
/ 18 ноября 2018

Перебирает список a, сравнивая его значение с первым значением кортежей в списке b. Это добавляет второе значение кортежа в список вывода, если первое значение кортежа совпадает со значением в a:

from itertools import chain

a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]

b = list(chain.from_iterable(b))
lst = []
for x in a:
    for y, z in b:
        if y == int(x):
            lst.append(z)
            break
    else:
        lst.append(0)

print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...