将目标值与列表相乘

时间:2018-03-21 20:45:03

标签: python python-3.x

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

尝试编写一个子程序,该程序将采用NUM列表,并且取决于相应列表中的值是M还是W,当M存在时,将Num list中的值乘以5,将W与10相乘。

尝试使用两个目标值和索引号但收效甚微

3 个答案:

答案 0 :(得分:1)

这样的事情会做你想做的事情:

X = ['M', 'W', 'W', 'M', 'M', 'W']
NUM = [1, 2, 3, 4, 5, 6]
X_VAL = {'M': 5,
         'W': 10
         }
result = []
for index, val in enumerate(NUM):
    result.append(val * X_VAL[X[index]])

print(result)

如果您需要任何帮助来理解代码,请告诉我。

编辑: 就像@ user2357112所说,你可以zip这两个列表:

X = ['M', 'W', 'W', 'M', 'M', 'W']
NUM = [1, 2, 3, 4, 5, 6]
X_VAL = {'M': 5,
         'W': 10
         }
result = []
for val, x in zip(NUM, X):
    result.append(val * X_VAL[x])

print(result)

答案 1 :(得分:1)

使用简单的列表推导和Python的三元运算符:

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

final = [i * (5 if j == 'M' else 10) for i, j in zip(NUM, X)]
print(final)

输出:

[5, 20, 30, 20, 25, 60]

如果您有两个以上的字母,并且每个字母都有一个唯一的乘法值,则可以使用字典:

>>> X = ['M','W','W','M','M','W', 'K', 'J', 'J', 'L']
>>> NUM = [1,2,3,4,5,6,4,2,1,8]
>>> dct = {'M': 5, 'W': 10, 'J': 8, 'K': 4, 'L': 3}
>>> [i * dct[j] for i, j in zip(NUM, X)]
[5, 20, 30, 20, 25, 60, 16, 16, 8, 24]

答案 2 :(得分:0)

另一种方法是使用lambda函数和map

def mult(x, num):
    factor = lambda i: 5 if i=='M' else 10
    return list(map(lambda i: factor(i[0]) * i[1],zip(x,num)))

X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]

print(mult(X, NUM))

输出:

[5, 20, 30, 20, 25, 60]