在 Python 3 中使用 lambda 和 map 函数修改列表中的数字
Modify numbers inside list with lambda and map functions in Python 3
对于家庭作业,我需要创建一个接收 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)
这 returns 相同的列表。
注意:我不能在这个作业中在 modifyEspecials()
内创建变量,我只能导入 ascii_lowercase、ascii_uppercase 和 functools 或 for/while 循环
因此,如果您必须使用这种过于复杂的方法来这样做,那么您会犯 2 个错误:
- 在第二个
map
中,您将 int 字符串与 int 进行比较
- 第二个
map
returns 一个大小为 especials
的迭代器
为了解决第一个问题直接转int,第二个问题转list后对所有元素求和,如果至少有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
很强大,但并不总是建议在不需要的地方使用它们。
对于家庭作业,我需要创建一个接收 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)
这 returns 相同的列表。
注意:我不能在这个作业中在 modifyEspecials()
内创建变量,我只能导入 ascii_lowercase、ascii_uppercase 和 functools 或 for/while 循环
因此,如果您必须使用这种过于复杂的方法来这样做,那么您会犯 2 个错误:
- 在第二个
map
中,您将 int 字符串与 int 进行比较 - 第二个
map
returns 一个大小为especials
的迭代器
为了解决第一个问题直接转int,第二个问题转list后对所有元素求和,如果至少有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
很强大,但并不总是建议在不需要的地方使用它们。