如何用Python函数式编程从两个列表中匹配对应位置等长字符串
解决方法
你的问题出在lambda的判断条件上——zip返回的每个param是一个包含两个字符串的元组,比如("aaa", "dddd"),你写的len(param) == len(param)其实是在比较元组自身的长度(永远是2),所以会返回所有配对,自然不符合预期。
正确的做法是分别取元组里两个字符串的长度做比较:
list1 = ["aaa", "bb", "c", "wwwww"] list2 = ["dddd", "xx", "a", "abcd"] result = list(filter(lambda pair: len(pair[0]) == len(pair[1]), zip(list1, list2))) print(result)
运行这段代码就能得到你要的[("bb", "xx"), ("c", "a")]。
简单拆解下逻辑:
zip(list1, list2):把两个列表对应位置的元素打包成元组,生成迭代器lambda pair: len(pair[0]) == len(pair[1]):接收每个元组,判断两个字符串长度是否相等,返回布尔值filter(...):筛选出lambda返回True的元组list(...):把filter生成的迭代器转换成列表
内容的提问来源于stack exchange,提问作者D-Money
相关产品推荐
相关产品推荐

