[英]Modify numbers inside list with lambda and map functions in Python 3
对于家庭作业,我需要创建一个 function 接收 2 个数字列表,并且每次第一个列表中的一个数字与第二个列表中的一个匹配时,我必须将10
添加到第一个列表中的数字。 这是我尝试过的。
def modifyEspecials(mylist,especials):
return list(map(lambda n: str(int(n)+10) if map(lambda x: True if n==x else False,especials)== True else n,mylist))
if __name__ == "__main__":
especials=[*range(39,48),*range(58,63),*range(91,97)]
mylist= ['72', '45', '41', '56', '46', '56', '49', '45', '48', '41', '39', '46', '71', '52', '46', '56', '52', '46', '42']
modifiedList= modifyEspecials(mylist,especials)
print(modifiedList)
这将返回相同的列表。
注意:我不能在本作业中的modifyEspecials()
中创建变量,我只能导入 ascii_lowercase、ascii_uppercase 和 functools 或 for/while 循环
因此,如果您必须使用这种过于复杂的方法来做到这一点,那么您会犯两个错误:
map
中,您将 int 字符串与 int 进行比较map
返回一个大小为especials
的迭代器为了克服第一个问题,只需转换为 int,对于第二个问题,只需将转换为列表后的所有元素相加,如果至少有 1 个True
则应添加10
请参阅以下修复:
def modifyEspecials(mylist,especials):
return list(map(lambda n: str(int(n)+10) if sum(list(map(lambda x: True if int(n)==x else False, especials))) > 0 else n, mylist))
if __name__ == "__main__":
especials=[*range(39,48),*range(58,63),*range(91,97)]
mylist= ['72', '45', '41', '56', '46', '56', '49', '45', '48', '41', '39', '46', '71', '52', '46', '56', '52', '46', '42']
modifiedList= modifyEspecials(mylist,especials)
print(modifiedList)
注意虽然map
和lambda
功能强大,但并不总是建议在不需要的地方使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.