繁体   English   中英

使用 Python 3 中的 lambda 和 map 函数修改列表中的数字

[英]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 循环

因此,如果您必须使用这种过于复杂的方法来做到这一点,那么您会犯两个错误:

  1. 在第二个map中,您将 int 字符串与 int 进行比较
  2. 第二个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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM