如何替换与另一个矩阵相对应的矩阵中的值?

时间:2018-11-18 17:37:32

标签: python python-3.x numpy if-statement replace

例如

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]

那就像如果a中的i代表ww,ee中的i代表b中的n,然后用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 :(得分:1)

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]

答案 1 :(得分:0)

此操作遍历列表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]

答案 2 :(得分:0)

您可以将映射的双重列表转换为查找字典,并使用list-comp:

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]

相关: