X = ['M','W','W','M','M','W']
NUM = [1,2,3,4,5,6]
尝试编写一个子程序,该程序将采用NUM列表,并且取决于相应列表中的值是M还是W,当M存在时,将Num list中的值乘以5,将W与10相乘。
尝试使用两个目标值和索引号但收效甚微
答案 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]