在 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 个错误:

  1. 在第二个 map 中,您将 int 字符串与 int 进行比较
  2. 第二个 map returns 一个大小为 especials
  3. 的迭代器

为了解决第一个问题直接转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)

注意 虽然maplambda很强大,但并不总是建议在不需要的地方使用它们。